कहें कि मेरे पास एक पहचान फ़ील्ड वाला टेबल है। मैं इसमें एक रिकॉर्ड डालना चाहता हूं अगर यह पहले से मौजूद नहीं है। नीचे दिए गए उदाहरण में, मैं जांचता हूं कि तालिका में @ फ़ील्ड 1 में संग्रहीत मान पहले से मौजूद है या नहीं।जब कोई मैच होता है तो आप MERGE का उपयोग करने के बाद पहचान मान कैसे प्राप्त करते हैं?
तालिका की परिभाषा:: यदि नहीं, तो मैं एक नया रिकॉर्ड सम्मिलित
MyTable (MyTableId int Identity not null, Field1 int not null, Field2 int not null)
यह मैं कैसे की जाँच है अगर मूल्य पहले से मौजूद है और यदि आवश्यक हो
merge MyTable as t
using (@Field1, @Field2) as s (Field1,Field2)
on (t.Field1=s.Field1)
when not matched then
insert (Field1,Field2) values (s.Field1,s.Field2);
पहचान हो रही डालें मान जब तालिका में रिकॉर्ड पहले से मौजूद नहीं था, तो जोड़कर किया जा सकता है:
output Inserted.MyTableId
लेकिन क्या होगा यदि रिकॉर्ड पहले से ही तालिका में था (यानी यदि कोई मैच था)?
एक ही रास्ता मैंने पाया मर्ज बयान को क्रियान्वित करने के बाद तालिका क्वेरी करने के लिए है:
select MyTableId from MyTable where [email protected]
वहाँ एक रास्ता मर्ज से सीधे पहचान मूल्य प्राप्त करने के है?
धन्यवाद एड्रियन लेकिन यदि कोई मिलान नहीं हुआ है तो आप @MatchedId में नया पहचान मान कैसे प्राप्त करते हैं? – Anthony
अद्यतन के लिए धन्यवाद। हां यह काम करेगा लेकिन ऐसा लगता है कि यह मर्ज के बाद "MyTableId MyTableId का चयन करें जहां फ़ील्ड 1 = @ फील्ड 1" मर्ज करने के बाद यह बहुत अधिक कोड है (जाहिर है यह वास्तविक तालिका आदि के आकार पर निर्भर करता है)।मैं बस उम्मीद कर रहा था कि मर्ज स्टेटमेंट में 'अंतर्निर्मित' समाधान था जो दोनों मामलों (मिलान या मिलान से) में पहचान मान वापस कर देगा। – Anthony