[英]SQL Server Script - select xml child nodes of root as (n)varchar
[英]Remove Root XML nodes from default output of Sql Server statement
我希望@MyActualXMLOut看起來像@MyDesiredXMLOut ...怎么樣? 提前致謝!
@MyDesiredXMLOut =
<MyRequiredRoot>
<Property1>Value1</Property1>
<Property2>Value2</Property2>
</MyRequiredRoot>
@MyActualXMLOut
<_x0040_MyTableVar>
<MyXML>
<MyRequiredRoot>
<Property1>Value1</Property1>
<Property2>Value2</Property2>
</MyRequiredRoot>
</MyXML>
</_x0040_MyTableVar>
下面的代碼可以按原樣運行...
DECLARE @MyDesiredXMLOut XML;
DECLARE @MyActualXMLOut XML;
SELECT @MyDesiredXMLOut =
CONVERT( XML,
'<MyRequiredRoot><Property1>Value1</Property1>
<Property2>Value2</Property2>
</MyRequiredRoot>' );
DECLARE @MyTableVar table( ID int NOT NULL, MyXML XML NOT NULL );
INSERT INTO @MyTableVar VALUES( 1, @MyDesiredXMLOut )
SELECT @MyActualXMLOut =
( SELECT MyXML
FROM @MyTableVar
WHERE ID = 1
FOR XML AUTO )
SELECT @MyDesiredXMLOut;
SELECT @MyActualXMLOut;
您可以使用query('/')
SELECT @MyActualXMLOut =
( SELECT MyXML.query ('/')
FROM @MyTableVar
WHERE ID = 1
FOR XML PATH('')
)
FOR XML AUTO
嘗試添加有關表名(可能包含無效XML元素名稱的字符)及其來源名稱的信息。
更改
SELECT @MyActualXMLOut =
( SELECT MyXML
FROM @MyTableVar
WHERE ID = 1
FOR XML AUTO )
至
SELECT @MyActualXMLOut =
( SELECT MyXML as '*'
FROM @MyTableVar
WHERE ID = 1
FOR XML PATH('') )
說明: as '*'
告訴SQL Server您只需要直接使用列值,所以不要使用列名作為標記名; FOR XML PATH('')
表示您不想在輸出周圍添加任何其他根節點,只需按原樣使用即可。
我不知道這是否是現實生活中的例子,但是:
表中的值已經是 XML ...
放棄FOR XML AUTO
(無論如何,應該指出PATH
):
SELECT @MyActualXMLOut =
( SELECT MyXML
FROM @MyTableVar
WHERE ID = 1);
甚至更簡單
SELECT @MyActualXMLOut = MyXML
FROM @MyTableVar
WHERE ID = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.