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

SQL सर्वर पर INSERT या UPDATE के लिए समाधान

लेनदेन के बारे में मत भूलना। प्रदर्शन अच्छा है, लेकिन सरल (IF EXISTS..) दृष्टिकोण बहुत खतरनाक है।
जब एकाधिक थ्रेड सम्मिलित करें या अपडेट करने का प्रयास करेंगे तो आप आसानी से प्राथमिक कुंजी उल्लंघन प्राप्त कर सकते हैं।

@Beau Crawford &@Esteban द्वारा प्रदान किए गए समाधान सामान्य विचार दिखाते हैं लेकिन त्रुटि-प्रवण।

गतिरोध और पीके उल्लंघन से बचने के लिए आप कुछ इस तरह का उपयोग कर सकते हैं:

begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
   update table set ...
   where key = @key
end
else
begin
   insert into table (key, ...)
   values (@key, ...)
end
commit tran

या

begin tran
   update table with (serializable) set ...
   where key = @key

   if @@rowcount = 0
   begin
      insert into table (key, ...) values (@key,..)
   end
commit tran


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में एक साथ कई कॉलम कैसे बदलें

  2. एमएस एसक्यूएल में पिछले 30 मिनट के रिकॉर्ड कैसे प्राप्त करें?

  3. SQL सर्वर में निहित लेनदेन कैसे काम करते हैं

  4. जहां न्यूल है, नॉट न्यूल या नो व्हेयर क्लॉज SQL सर्वर पैरामीटर मान पर निर्भर करता है

  5. SQL सर्वर में डेटाबेस ऑब्जेक्ट और टेबल डेटा की खोज करना