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

SQL सर्वर MERGE कथन के साथ समस्याएँ

#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;

यदि आप चार स्रोत पंक्तियों को एक लक्ष्य पंक्ति से मिलाते हैं, तो आपको कभी भी एक उपयोगी परिणाम नहीं मिलेगा - आपको यह जानना होगा कि आप वास्तव में क्या चाहते हैं।

मार्क



  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. कैसे निर्धारित करें कि विशिष्ट IMAGE डेटा प्रकार वाला रिकॉर्ड तालिका में पहले से मौजूद है या नहीं?

  3. छँटाई में NULL की स्थिति बदलना

  4. क्वेरी, संग्रहीत कार्यविधियों और ट्रिगर के लिए SQL सर्वर प्रदर्शन संकेतक को लागू करना

  5. SQL सर्वर में IP पता संग्रहीत करने के लिए डेटाटाइप