sql >> Database >  >> RDS >> Sqlserver

Hoe te bepalen of een record met een specifiek IMAGE-gegevenstype al in de tabel bestaat?

De meest effectieve manier die ik kan bedenken is het gebruik van een persistente berekende kolom voor een hash-waarde van de afbeeldingskolom. Gebruik hashbytes om de hash te berekenen en een unieke beperking toe te voegen op de berekende kolom.

Tabeldefinitie:

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

Voorbeeldcode tegen afbeeldingentabel:

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)

De unieke beperking creëert een index die in de zoekopdracht zal worden gebruikt.

Uw SP om een ​​afbeelding toe te voegen kan er als volgt uitzien met samenvoegen en uitvoer met een truc uit dit antwoord UPDATE -no-op in SQL MERGE-instructie geleverd door 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. Problemen met MySQL LOAD XML INFILE

  2. Efficiënte manier om dataframe in te voegen van R naar SQL

  3. Het geheugengebruik van MySQL-resultaten begrijpen in PHP (PDO)

  4. Mysql - conversatie vinden die alleen door twee gebruikers wordt gevoerd