2011-09-06 3 views
7

क्या इन दो प्रतिस्थापन मानों को 1 अपडेट कथन के साथ संयोजित करने का कोई तरीका है?टीएसक्यूएल 2005, एक्सएमएल डीएमएल - एक बार में दो मान अपडेट करें?

UPDATE dbo.MyTable 
SET MyXmlColumn.modify('replace value of (/node/@att1)[1] with "1"') 
WHERE id = 1 

UPDATE dbo.MyTable 
SET MyXmlColumn.modify('replace value of (/node/@att2)[1] with "2"') 
WHERE id = 1 

http://msdn.microsoft.com/en-US/library/ms190675(v=SQL.90).aspx

+0

http://stackoverflow.com/questions/7395942/updating-multiple-xml-nodes-using-t-sql का उत्तर देखें। –

उत्तर

6

मुझे नहीं लगता कि आप भाग्य में हैं, Thx।

मैंने बिना किसी खुशी के कई वाक्य रचनात्मक रूपों की कोशिश की।

SET MyXmlColumn.modify('...'), MyXmlColumn.modify('...') 

पैदावार: उदाहरण के लिए, स्पष्ट के लिए

स्तंभ नाम 'MyXmlColumn' एक बार सेट खंड में उल्लेख किया गया है। एक कॉलम को उसी एसईटी क्लॉज में एक से अधिक मान असाइन नहीं किया जा सकता है। यह सुनिश्चित करने के लिए एसईटी क्लॉज को संशोधित करें कि एक कॉलम केवल एक बार अपडेट किया गया है। यदि एसईटी क्लॉज दृश्य के कॉलम अपडेट करता है, तो कॉलम नाम 'MyXmlColumn' दृश्य परिभाषा में दो बार दिखाई दे सकता है।

लेकिन एक्सएमएल डीएमएल स्पेस में इस त्रुटि संदेश के लिए कुछ भी उपयोगी नहीं है।

नीचे पंक्ति यह है कि अभिव्यक्ति 1 & अभिव्यक्ति 2 एकल तत्व होना चाहिए।

यहां तक ​​कि सबसे पूरी तरह से विचार विमर्श के माध्यम से यह पाशन ...

http://blogs.msdn.com/b/denisruc/archive/2005/09/19/471562.aspx

क्षमा अंत। :(

पुनश्च: यदि आपको hackiness खड़े हो सकते हैं, तो VARCHAR (मैक्स) के लिए कास्टिंग तो एक सामान्य REPLACE() चाल करना चाहिए कर देखें:। Can I do a find/replace in t-sql?

2

नहीं है, के रूप में दस्तावेज में कहा गया है, replace value of केवल एक ही समय में एक ही नोड पर काम कर सकते हैं। जहां तक ​​मुझे पता है, इसके लिए कोई कामकाज नहीं है। आपको 2 अपडेट कथन का उपयोग करना होगा।

+1

"ध्यान दें कि लक्ष्य को अद्यतन किया जाना चाहिए, अधिकतर, एक नोड जिसे अभिव्यक्ति के अंत में" [1] "जोड़कर पथ अभिव्यक्ति में स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।" मैंने इसका अर्थ यह लिया कि मेरा एक्सपैथ केवल 1 नोड लौटा सकता है, न कि मेरे पास प्रत्येक लक्ष्य 1 नोड स्टेटमेंट्स के दो प्रतिस्थापन मूल्य हो सकते हैं – TrevDev

1

तुम सिर्फ तुम चाहते हो मूल्यों की एक जोड़ी है, तो बदलने के लिए आप sqlservercentral पर पाए गए इस दृष्टिकोण का उपयोग कर सकते हैं। यह डेटा को कई बार कुशलतापूर्वक प्राप्त करने के लिए एक चयन कथन का उपयोग करता है और तालिका डेटा को बदलने के लिए एक एकल अद्यतन कथन का उपयोग करता है।

सही नहीं है लेकिन यह पर्याप्त हो सकता है कुछ मामलों का उपयोग करें। असल में यह बदलने के लिए मूल्यों की एक निश्चित संख्या के लिए लूपिंग समाधान का सरलीकृत संस्करण है।

DECLARE @temp XML 
SET @temp = (SELECT Column_name FROM Table_name WHERE AuthId = @AuthId) 

SET @temp.modify('replace value of (/UmAuthDto/Assignment/QueueId/text())[1] with sql:variable("@NewValue")') 
SET @temp.modify('replace value of (/UmAuthDto/Assignment/QueueName/text())[1] with sql:variable("@NewValue")') 

UPDATE Table_name 
SET Column_name = @temp 
WHERE AuthId = @AuthId 
संबंधित मुद्दे