#S
. में चार में से कोई भी मान आपकी लक्ष्य तालिका के एकल पंक्ति मान से मेल खाएगा (#S में सभी मानों में id =1 और नाम ='A' है - इसलिए वे सभी लक्ष्य में एकल पंक्ति से मेल खाते हैं), इस प्रकार यह मान चार बार अपडेट किया जाएगा - यही त्रुटि है कहते हैं, और यह बिल्कुल सही है।
आप वास्तव में यहाँ क्या हासिल करना चाहते हैं ??
क्या आप स्रोत तालिका के पहले मानों पर पता सेट करना चाहते हैं? एक TOP 1
का प्रयोग करें आपके उप-चयन में खंड:
MERGE #T
USING (SELECT TOP 1 id, name, address FROM #S) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
UPDATE SET Address = S.Address;
क्या आप पता को स्रोत तालिका से मानों के यादृच्छिक तत्व पर सेट करना चाहते हैं? एक TOP 1
का प्रयोग करें और ORDER BY NEWID()
आपके उप-चयन में खंड:
MERGE #T
USING (SELECT TOP 1 id, name, address FROM #S ORDER BY NEWID()) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
UPDATE SET Address = S.Address;
यदि आप चार स्रोत पंक्तियों को एक लक्ष्य पंक्ति से मिलाते हैं, तो आपको कभी भी एक उपयोगी परिणाम नहीं मिलेगा - आपको यह जानना होगा कि आप वास्तव में क्या चाहते हैं।
मार्क