मैं सोच रहा था कि क्या आपको UPSERT की अवधारणा के समान T-SQL कमांड का सामना करना पड़ा है? INSERT प्रदर्शन करना। विकल्प (1) या (2) का उपयोग करते हुए अद्यतन करना अत्यधिक जटिल और त्रुटि प्रवण लगता है।
उद्देश्य
यह सुनिश्चित करने के लिए कि वांछित रिकॉर्ड (इस मामले में employee_id 1) आवश्यक रूप से एक ही क्वेरी को दो बार लिखने के बिना अप-टू-डेट है।
संदर्भ
- टेबल का नाम: कर्मचारी
- कर्मचारी आईडी: एक प्राथमिक कुंजी है, और पहचान की सत्यता निर्धारित है
विकल्प
SQL UPDATE निष्पादित करें ... check @@ rowcount = 0 और @@ त्रुटि = 0 ... यदि आवश्यक हो तो SQL INSERT निष्पादित करें
- con: आपको प्रभावी रूप से एक ही बार, एक अपडेट के रूप में, एक बार एक ही क्वेरी को एक बार लिखना होगा
- con: more code = अधिक समय टाइप करना
- con: more code = त्रुटि के लिए अधिक स्थान
/programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure "@@ rowcount" का उपयोग करके अपडेट करें
- SQL MERGE निष्पादित करें
- con: आपको प्रभावी रूप से एक ही बार, एक अपडेट के रूप में, एक बार एक ही क्वेरी को एक बार लिखना होगा
- con: more code = अधिक समय टाइप करना
- con: more code = त्रुटि के लिए अधिक स्थान
http://technet.microsoft.com/en-us/library/bb510625.aspx "T-SQL मर्ज"
- SQL UPSERT निष्पादित करें (सुविधा मौजूद नहीं है)
- प्रो: आप एक बार डेटा-टू-टेबल रिलेशनशिप को परिभाषित करते हैं (SQL सर्वर के बारे में चिंता करें कि यह INSERT या UPDD है या नहीं)
- समर्थक: कम कोड = तेज कार्यान्वयन
- प्रो: कम कोड = कम संभावना
यूपीएसईटी परीक्षा
UPSERT कर्मचारी (कर्मचारी_ कर्मचारी, कर्मचारी_नंबर, नौकरी_टाइटल, फर्स्ट_नाम, मिडिलनाम, उपनाम, संशोधित_त) मूल्य (1, '00 -124AB37 ',' प्रबंधक ',' जॉन जॉन, 'टी', 'स्मिथ', गेटडेट ());
- अगर employee_id 1 मौजूद नहीं है: MS SQL एक INSERT स्टेटमेंट निष्पादित करता है
- अगर employee_id 1 मौजूद है: MS SQL निष्पादित और अद्यतन कथन
MERGE
सीधा, लचीला है, और यह SQL मानक का भी हिस्सा है। MERGE
और अन्य UPSERT
कार्यान्वयन के साथ वास्तविक समस्या संभावित लॉक एस्केलेशन या यहां तक कि गतिरोध भी है जिसका सिंटैक्स के साथ कोई लेना-देना नहीं है।
MERGE
से SQL सर्वर में कार्यान्वयन के बारे में एक डायट्रीब है ।