Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कैसे निर्धारित करें कि विशिष्ट IMAGE डेटा प्रकार वाला रिकॉर्ड तालिका में पहले से मौजूद है या नहीं?

सबसे प्रभावी तरीका मैं सोच सकता हूं कि एक सतत गणना कॉलम छवि कॉलम के हैश मान के लिए। हैशबाइट्स का उपयोग करें हैश की गणना करने और अद्वितीय बाधा जोड़ने के लिए परिकलित कॉलम पर।

तालिका परिभाषा:

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;  



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlQuery के साथ संग्रहीत कार्यविधि से एकाधिक परिणाम संभालें

  2. एसएसएएस आयाम प्रसंस्करण कुंजी त्रुटि नहीं मिली

  3. टी-एसक्यूएल में एक पंक्ति के पिछले मान का उपयोग करके मूल्य की गणना करना

  4. SQL सर्वर डेटाबेस सिंक्रनाइज़ेशन समस्याएँ

  5. SQL सर्वर एक मिलीसेकंड क्यों खो रहा है?