सबसे प्रभावी तरीका मैं सोच सकता हूं कि एक सतत गणना कॉलमका उपयोग करना है। ए> छवि कॉलम के हैश मान के लिए। हैशबाइट्स का उपयोग करें हैश की गणना करने और अद्वितीय बाधा जोड़ने के लिए परिकलित कॉलम पर।
तालिका परिभाषा:
create table Images
(
ID int identity primary key,
Img varbinary(max),
ImgHash as convert(varbinary(16), hashbytes('MD5', Img)) persisted unique
)
इमेज टेबल के सामने नमूना कोड:
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)
अद्वितीय बाधा एक अनुक्रमणिका बनाती है जिसका उपयोग क्वेरी में किया जाएगा।
इमेज जोड़ने के लिए आपका SP मर्ज का उपयोग करके कुछ इस तरह दिख सकता है और आउटपुट इस उत्तर से एक ट्रिक के साथ UPDATE SQL MERGE स्टेटमेंट में -नो-ऑप 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;