Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menentukan apakah record dengan tipe data IMAGE tertentu sudah ada di tabel?

Cara paling efektif yang dapat saya pikirkan adalah dengan menggunakan kolom terhitung untuk nilai hash kolom gambar. Gunakan hashbytes untuk menghitung hash dan menambahkan batasan unik pada kolom yang dihitung.

Definisi tabel:

create table Images
(
  ID int identity primary key, 
  Img varbinary(max),
  ImgHash as convert(varbinary(16), hashbytes('MD5', Img)) persisted unique
)

Contoh kode terhadap tabel Gambar:

insert into Images values 
(convert(varbinary(max), 'Image1')),
(convert(varbinary(max), 'Image2'))

declare @NewImage varbinary(max) = convert(varbinary(max), 'Image2')

select count(*)
from Images
where ImgHash = hashbytes('MD5', @NewImage)

Batasan unik membuat indeks yang akan digunakan dalam kueri.

SP Anda untuk menambahkan gambar dapat terlihat seperti ini menggunakan merge dan keluaran dengan trik dari jawaban ini PERBARUI -no-op dalam pernyataan SQL MERGE disediakan oleh Andriy M .

create procedure Images_Add
  @NewImage varbinary(max)
as  

declare @dummy int

merge Images as T
using (select @NewImage, hashbytes('MD5', @NewImage)) as S(Img, ImgHash)
on T.ImgHash = S.ImgHash
when not matched then
  insert(Img) values(S.Img)
when matched then
  update set @dummy = 0  
output inserted.ID;  



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan ke dalam tabel hanya dengan satu kolom IDENTITAS?

  2. Urutan pemasangan/pencopotan VS 2008 dan SQL Server 2008

  3. SQL Server UNION - Apa ORDER BY Behavior default?

  4. Tidak dapat terhubung dari ASP Klasik ke SQL Server 2008 R2 menggunakan SQL Native Client (Windows 7 - IIS7)

  5. SQL Server tidak melepaskan memori setelah kueri dijalankan