none
(Sumber: milis SQL Server) Tidak bisa mengeksekusi query DISTINCT pada type data Image (Binary) RRS feed

  • Pertanyaan

  • Dear All,
    Ketika saya menggunakan syntax SQL DISTINCT, saya mendapatkan pesan kesalahan "The image data type cannot be selected as DISTINCT because is not comparable". Berikut kode yang saya gunakan :

    CommandInv.CommandText = "SELECT DISTINCT I.INV_NO,P.PAINT_IMG,P.PAINT_IMGSIGN,P.PAINT_IMGINVERSO" & _
    ",S.SCULPT_IMG,S.SCULPT_IMGSIGN" & _
    ",J.JEWEL_IMG" & _
    ",W.WINE_IMG" & _
    ",C.CERT_FRONTIMG,C.CERT_BACKIMG " & _
    "FROM INVENTORY.dbo.INVENTORY I " & _
    "LEFT OUTER JOIN INVENTORY.dbo.PAINTING P ON I.PAINT_ID=P.PAINT_ID " & _
    "LEFT OUTER JOIN INVENTORY.dbo.SCULPTURE S ON I.SCULPT_ID=S.SCULPT_ID " & _
    "LEFT OUTER JOIN INVENTORY.dbo.JEWELLERY J ON I.JEWEL_ID=J.JEWEL_ID " & _
    "LEFT OUTER JOIN INVENTORY.dbo.WINE W ON I.WINE_ID=W.WINE_ID " & _
    "LEFT OUTER JOIN INVENTORY.dbo.CERTIFICATE C ON I.CERT_ID=C.CERT_ID OR C.CERT_ID=P.CERT_ID OR C.CERT_ID=S.CERT_ID "


    Saya menampilkan data tersebut kedalam datagridview. Mohon pencerahannya..
    Trimakasih sebelumnya,


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Kamis, 27 September 2012 08.59
    Moderator

Jawaban

  • Halo,
    tipe data image dan text tidak bisa di distinct.
    kalo mau di bikin store procedure yg di dalamnya menggunakan table temp.
    kira2 seperti ini
    ini diasumsikan  yang mau di distinct table INVENTORY nya


    create procedure <nama prosedur>
    as
    begin
    --- tipe datanya di sesuaikan, yang ini hanya contoh penulisan nya
    CREATE TABLE #tblINVENTORY (  ---- tanda # menandakan table temp
        [INV_NO] [datetime] null,      ---- contoh penulisan untuk tipe data datetime
        [PAINT_ID] [varchar](11) NULL, ---- contoh penulisan tipe data varchar
        [SCULPT_ID] [numeric](18, 0) NULL, ---- contoh penulisan tipe data numeric
        [JEWEL_ID] [varchar](25) NULL,
        [WINE_ID] [varchar](10) NULL,
        [CERT_ID] [smallint] NULL
    ) ON [PRIMARY]

    --- insert data dari table aslinya, kalo bisa pake where biar data yg perlu aja yg di pake
    insert #tblINVENTORY
    select DISTINCT INV_NO,PAINT_ID,SCULPT_ID,JEWEL_ID,WINE_ID,CERT_ID
    from INVENTORY

    --- tinggal ganti table INVENTORY dengan table tempnya
    SELECT  I.INV_NO,P.PAINT_IMG,P.PAINT_IMGSIGN,P.PAINT_IMGINVERSO
    ,S.SCULPT_IMG,S.SCULPT_IMGSIGN
    ,J.JEWEL_IMG
    ,W.WINE_IMG
    ,C.CERT_FRONTIMG,C.CERT_BACKIMG
    FROM INVENTORY.#tblINVENTORY I
    LEFT OUTER JOIN INVENTORY.dbo.PAINTING P ON I.PAINT_ID=P.PAINT_ID
    LEFT OUTER JOIN INVENTORY.dbo.SCULPTURE S ON I.SCULPT_ID=S.SCULPT_ID
    LEFT OUTER JOIN INVENTORY.dbo.JEWELLERY J ON I.JEWEL_ID=J.JEWEL_ID
    LEFT OUTER JOIN INVENTORY.dbo.WINE W ON I.WINE_ID=W.WINE_ID
    LEFT OUTER JOIN INVENTORY.dbo.CERTIFICATE C ON I.CERT_ID=C.CERT_ID OR C.CERT_ID=P.CERT_ID OR C.CERT_ID=S.CERT_ID
    end

    trus di perintah di commandText nya

    CommandInv.CommandText ="exec <nama prosedur>"

    silakan di coba ..... gue gak bisa nyoba ... ^_^ ... moga2 gak ada yg salah .....

    semoga bermanfaat.

    Dijawab oleh Zabreak


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    Kamis, 27 September 2012 09.01
    Moderator
  • maap ada yg lupa di akhir procedur sebelum "end" tambahin drop table #tblINVENTORY. biasain kalau pake temp table terakhirnya di drop, karena ini salah satunya yg menyebabkan file ldf nya bengkak,kalo file ldf nya bengkak akan mengganggu performa.

    sering2 menggunakan temp table, untuk query yang menggunakan banyak sub query,kalo sub querynya mengakses data yg besar.
    kalo di dalam function, tidak bisa menggunakan temb table dengan tanda # tapi gunakan @, jadi temp tablenya berupa variable table, karena berupa variable, yg di pake pertama untuk nampung temp nya, ya di memory komputer, kalo penuh memory, baru menggunakan space harddisk, jadi hati2 menggunakan temp table dengan @. bisa2 malah mengganggu performa.

    Dijawab oleh Zabreak


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Kamis, 27 September 2012 09.03
    Moderator

Semua Balasan

  • Halo,
    tipe data image dan text tidak bisa di distinct.
    kalo mau di bikin store procedure yg di dalamnya menggunakan table temp.
    kira2 seperti ini
    ini diasumsikan  yang mau di distinct table INVENTORY nya


    create procedure <nama prosedur>
    as
    begin
    --- tipe datanya di sesuaikan, yang ini hanya contoh penulisan nya
    CREATE TABLE #tblINVENTORY (  ---- tanda # menandakan table temp
        [INV_NO] [datetime] null,      ---- contoh penulisan untuk tipe data datetime
        [PAINT_ID] [varchar](11) NULL, ---- contoh penulisan tipe data varchar
        [SCULPT_ID] [numeric](18, 0) NULL, ---- contoh penulisan tipe data numeric
        [JEWEL_ID] [varchar](25) NULL,
        [WINE_ID] [varchar](10) NULL,
        [CERT_ID] [smallint] NULL
    ) ON [PRIMARY]

    --- insert data dari table aslinya, kalo bisa pake where biar data yg perlu aja yg di pake
    insert #tblINVENTORY
    select DISTINCT INV_NO,PAINT_ID,SCULPT_ID,JEWEL_ID,WINE_ID,CERT_ID
    from INVENTORY

    --- tinggal ganti table INVENTORY dengan table tempnya
    SELECT  I.INV_NO,P.PAINT_IMG,P.PAINT_IMGSIGN,P.PAINT_IMGINVERSO
    ,S.SCULPT_IMG,S.SCULPT_IMGSIGN
    ,J.JEWEL_IMG
    ,W.WINE_IMG
    ,C.CERT_FRONTIMG,C.CERT_BACKIMG
    FROM INVENTORY.#tblINVENTORY I
    LEFT OUTER JOIN INVENTORY.dbo.PAINTING P ON I.PAINT_ID=P.PAINT_ID
    LEFT OUTER JOIN INVENTORY.dbo.SCULPTURE S ON I.SCULPT_ID=S.SCULPT_ID
    LEFT OUTER JOIN INVENTORY.dbo.JEWELLERY J ON I.JEWEL_ID=J.JEWEL_ID
    LEFT OUTER JOIN INVENTORY.dbo.WINE W ON I.WINE_ID=W.WINE_ID
    LEFT OUTER JOIN INVENTORY.dbo.CERTIFICATE C ON I.CERT_ID=C.CERT_ID OR C.CERT_ID=P.CERT_ID OR C.CERT_ID=S.CERT_ID
    end

    trus di perintah di commandText nya

    CommandInv.CommandText ="exec <nama prosedur>"

    silakan di coba ..... gue gak bisa nyoba ... ^_^ ... moga2 gak ada yg salah .....

    semoga bermanfaat.

    Dijawab oleh Zabreak


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    Kamis, 27 September 2012 09.01
    Moderator
  • maap ada yg lupa di akhir procedur sebelum "end" tambahin drop table #tblINVENTORY. biasain kalau pake temp table terakhirnya di drop, karena ini salah satunya yg menyebabkan file ldf nya bengkak,kalo file ldf nya bengkak akan mengganggu performa.

    sering2 menggunakan temp table, untuk query yang menggunakan banyak sub query,kalo sub querynya mengakses data yg besar.
    kalo di dalam function, tidak bisa menggunakan temb table dengan tanda # tapi gunakan @, jadi temp tablenya berupa variable table, karena berupa variable, yg di pake pertama untuk nampung temp nya, ya di memory komputer, kalo penuh memory, baru menggunakan space harddisk, jadi hati2 menggunakan temp table dengan @. bisa2 malah mengganggu performa.

    Dijawab oleh Zabreak


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Kamis, 27 September 2012 09.03
    Moderator