2016-01-20 57 views
1

我希望@MyActualXMLOut看起来像@MyDesiredXMLOut ...怎么样?提前致谢!从Sql Server语句的默认输出中删除根XML节点

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

回答

2

您可以使用query('/')

SELECT @MyActualXMLOut = 
     ( SELECT MyXML.query ('/') 
      FROM @MyTableVar 
      WHERE ID = 1 
      FOR  XML PATH('') 
     ) 
+0

**谢谢!这就是它!** – HDW

+0

这可以用作替代我发布的解决方案,只需使用'.query()'而不是'as'*'' –

+0

Jamie,@DanField,您正在告诉一个值,它已经是XML被输出为XML,然后使用query()来获得它的XML ......为什么? – Shnugo

1

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服务器; FOR XML PATH('')表示您不想在输出周围添加任何其他根节点,只是按原样使用。

+0

好办法也做..也许更少的开销 – JamieD77

1

我不知道这是现实生活中的例子,但是:

表中值是的XML已经...

告辞而去的FOR XML AUTO(反正是指出一个应该更喜欢PATH):

SELECT @MyActualXMLOut = 
    (SELECT MyXML 
     FROM @MyTableVar 
     WHERE ID = 1); 

或者也可以简单

SELECT @MyActualXMLOut = MyXML 
FROM @MyTableVar 
WHERE ID = 1; 
+0

因此,我的假设的一部分是,可能有一些愿望,从表变量的多行产生这一点 - 即使实际情况是佛罗伦萨。如果你只想要一行,那么这就足够了,应该是最有意义的。 –

+0

@DanField,好的,我明白你的意思了......'WHERE ID = 1'实际上听起来不那么实际,但是你是对的,在这种情况下,可以从所有XML值创建一个多节点XML桌子... – Shnugo