जब आपको किसी शर्त पर रिकॉर्ड की विशिष्टता की गारंटी देने की आवश्यकता होती है जिसे अद्वितीय या प्राथमिक कुंजी बाधा द्वारा व्यक्त नहीं किया जा सकता है, तो आपको वास्तव में यह सुनिश्चित करने की ज़रूरत है कि अस्तित्व और सम्मिलन की जांच एक लेनदेन में की जा रही है। आप इसे या तो हासिल कर सकते हैं:
- चेक और इंसर्ट करते हुए एक SQL स्टेटमेंट का उपयोग करना (आपका तीसरा विकल्प)
- उपयुक्त अलगाव स्तर के साथ लेनदेन का उपयोग करना
हालांकि एक चौथा तरीका है जो आपको अपने कोड को बेहतर ढंग से संरचित करने में मदद करेगा और यह उन परिस्थितियों में भी काम करेगा जहां आपको एक ही बार में रिकॉर्ड के बैच को संसाधित करने की आवश्यकता होती है। आप एक टेबल वेरिएबल या एक अस्थायी टेबल बना सकते हैं, उन सभी रिकॉर्ड्स को सम्मिलित कर सकते हैं जिन्हें वहां डालने की आवश्यकता है और फिर इस वेरिएबल के आधार पर INSERT, UPDATE और DELETE स्टेटमेंट लिखें।
नीचे (छद्म) कोड इस दृष्टिकोण को प्रदर्शित करता है:
-- Logic to create the data to be inserted if necessary
DECLARE @toInsert TABLE (idCol INT PRIMARY KEY,dataCol VARCHAR(MAX))
INSERT INTO @toInsert (idCol,dataCol) VALUES (1,'row 1'),(2,'row 2'),(3,'row 3')
-- Logic to insert the data
INSERT INTO realTable (idCol,dataCol)
SELECT TI.*
FROM @toInsert TI
WHERE NOT EXISTS (SELECT 1 FROM realTable RT WHERE RT.dataCol=TI.dataCol)
कई परिस्थितियों में मैं इस दृष्टिकोण का उपयोग करता हूं क्योंकि यह टीएसक्यूएल कोड को पढ़ने में आसान बनाता है, रिफैक्टर करना और यूनिट परीक्षणों को लागू करना संभव बनाता है।