sql - parse xml as table -
मेरे पास कुछ एक्सएमएल है:
& lt; MyDetails & gt; & Lt; विस्तार कुंजी = "key1" मान = "मान 1" / & gt; & Lt; विस्तार कुंजी = "key2" मान = "मान 2" / & gt; & Lt; विस्तार कुंजी = "कुंजी 3" मान = "मान 3" / & gt; & Lt; विस्तार कुंजी = "key4" मान = "मान 4" / & gt; & Lt; / MyDetails & gt; और मैं इसे दो कॉलम कुंजी, और मान के तालिका स्वरूप में पार्स करने में सक्षम होना चाहता हूं। मैं नोड पथ को निर्दिष्ट करके इसे प्राप्त करने के लिए SQL फ़ंक्शन कैसे बना सकता हूं, इस मामले में '/ MyDetails / detail' और KeyAttributeName और ValueAttributeName। मैं निम्नलिखित समारोह बनाया है, लेकिन यह मुझे त्रुटि देता है:।
बदल फंक्शन [dbo] [GetXmlTable] (@XmlSource एक्सएमएल, @HierarchyPath NVARCHAR (50) = ', @SpecificKey NVARCHAR ( 255) = शून्य, @KeyAttributeName NVARCHAR (50) = 'कुंजी', @ValueAttributeName NVARCHAR (50) = 'मान') @Table टेबल ([Key] NVARCHAR (255) देता है, [मान] NVARCHAR (500)) के रूप में शुरुआत DECLARE @KeyAttribute NVARCHAR (50) = '@' + @KayAttributeName DECLARE @ValueAttribute NVARCHAR (50) = '@' + @ValueAttributeName DECLARE @ पैठ NVARCHAR (50) = '/' + @HierarchyPath INSERT @ SELECT SELECT XmlElement.Attribute .Value (@KeyAttribute, 'nvarchar (255)') के रूप में [Key], XmlElement.Attribute.value (@ValueAttribute, 'nvarchar (500)') के रूप में [मान] से @ XmlSource.nodes (@Path) XmlElement के रूप में ( विशेषता) WHERE @SpecificKey IS NULL या XmlElement.Attribute.value (@KeyAttribute, 'नर्वचर (2 55) ') = @SpecificKey वापसी अंत जाओ त्रुटि:
संदेश 8172, स्तर 16, राज्य 1, GetXmlTable प्रक्रिया, रेखा 12 तर्क 1 एक्सएमएल डेटा प्रकार पद्धति "नोड्स" का एक स्ट्रिंग शब्दशः होना चाहिए।
फ़ंक्शन को इस तरह से कॉल करना चाहते हैं:
चुनें dbo.GetXmlTable से (CAST ('& lt; MyDetails & gt; & Lt; विस्तार कुंजी = "key1" मान = "मान 1" / & gt; & Lt; विस्तार कुंजी = "key2" मान = "मान 2" / & gt; & Lt; विस्तार कुंजी = "कुंजी 3" मान = "मान 3" / & gt; & Lt; विस्तार कुंजी = "key4" मान = "मान 4" / & gt; & Lt; / MyDetails & gt; ' UPDATE ---------------
के रूप में, मैंने एसक्यूएल चर वाक्यविन्यास का उपयोग करने की कोशिश की लेकिन वापस लौटा हुआ तालिका रिक्त है। आप कृपया बाहर बिंदु सकता है मैं गलत क्या कर रहा हो सकता है:
घोषणा @KeyAttr VARCHAR (50) = एन '@' + @KeyAttributeName घोषणा @ValueAttr VARCHAR (50) = एन '@' + @ValueAttributeName घोषणा @Path VARCHAR (100) = '/' + @HierarchyPath INSERT INTO @Table चयन XmlElement.Attribute.value ( '(* [स्थानीय नाम () = एसक्यूएल: चर ( "@ KeyAttr")]) [1 ] ',' nvarchar (255) ') के रूप में [Key], XmlElement.Attribute.value (' (* [स्थानीय नाम () = एसक्यूएल: चर ( "@ ValueAttr")] [1]) ',' nvarchar ( 500) 'के रूप में [मूल्य] @ XmlSource.nodes (' (* [स्थानीय नाम (=) = sql: variable ("@ path")]) '' एस एक्सएमएलएलेमेंट (एट्रिब्यूट) जहां @ विशिष्टकैया नल या एक्सएमएलएलिमेंट है। Attribute.value ('(* [local-name () = sql: variable ("@ keyAttr")] [1]', 'नर्वचर (255)') = @SpecificKey
यह क्वेरी आपके XML को एक साधारण तालिका में टुकड़ा कर देगा;
घोषित करें @ xml xml = ' & LT; MyDetails & gt; & Lt; विस्तार कुंजी = "key1" मान = "मान 1" / & gt; & Lt; विस्तार कुंजी = "key2" मान = "मान 2" / & gt; & Lt; विस्तार कुंजी = "कुंजी 3" मान = "मान 3" / & gt; & Lt; विस्तार कुंजी = "key4" मान = "मान 4" / & gt; & Lt; / MyDetails & gt; ' @ Xml.nodes ('/ MyDetails / detail' से मूल्य के रूप में), के रूप में [कुंजी], 'tcvalue (' @ value ',' varchar (100) ') के रूप में tcvalue (' @ key ',' varchar (100) ') का चयन करें ) टी (सी) के रूप में त्रुटि "XML डेटा प्रकार पद्धति का तर्क 1" नोड्स "स्ट्रिंग शब्दशः होना चाहिए।" इसका अर्थ है कि वास्तव में वह क्या कहता है - आप एक वैरिएबल को नोड्स () विधि के तर्क के रूप में नहीं दे सकते। आप नोड्स () को पास किए गए XQuery में चर संदर्भ कर सकते हैं - अधिक जानकारी के लिए देखें।
Comments
Post a Comment