Sql server 从Sql Server语句的默认输出中删除根XML节点
我希望@MyActualXMLOut看起来像@MyDesiredXMLOut。。。怎样提前谢谢 @MyDesiredXMLOut=Sql server 从Sql Server语句的默认输出中删除根XML节点,sql-server,xml,Sql Server,Xml,我希望@MyActualXMLOut看起来像@MyDesiredXMLOut。。。怎样提前谢谢 @MyDesiredXMLOut= <MyRequiredRoot> <Property1>Value1</Property1> <Property2>Value2</Property2> </MyRequiredRoot> @MyActualXMLOut <_x0040_MyTableVar> <
<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;
您可以使用查询“/”
您可以使用查询“/”
FOR XML AUTO正在尝试添加有关表名的信息,该表名可能包含无效的XML元素名字符及其来源的列名
改变
SELECT @MyActualXMLOut =
( SELECT MyXML
FROM @MyTableVar
WHERE ID = 1
FOR XML AUTO )
到
说明:由于“*”告诉SQL Server您只需要直接获取列值,因此不要将列名用作标记名;FOR XML PATH表示您不想在输出周围添加任何额外的根节点,只需按原样使用。FOR XML AUTO正在尝试添加有关表名的信息,该表名可能包含无效的XML元素名字符及其来源的列名
改变
SELECT @MyActualXMLOut =
( SELECT MyXML
FROM @MyTableVar
WHERE ID = 1
FOR XML AUTO )
到
说明:由于“*”告诉SQL Server您只需要直接获取列值,因此不要将列名用作标记名;FOR XML PATH表示您不想在输出周围添加任何额外的根节点,只需按原样使用即可。我不知道这是否是真实的示例,但是: 表中的值已经是XML 不管怎样,都不要使用XML自动模式,正如所指出的那样,应该选择以下路径: 甚至更简单
SELECT @MyActualXMLOut = MyXML
FROM @MyTableVar
WHERE ID = 1;
我不知道这是否是真实的例子,但是: 表中的值已经是XML 不管怎样,都不要使用XML自动模式,正如所指出的那样,应该选择以下路径: 甚至更简单
SELECT @MyActualXMLOut = MyXML
FROM @MyTableVar
WHERE ID = 1;
谢谢就这样!这是我发布的解决方案的一个替代方案,只是使用.query而不是“*”Jamie,@DanField,您正在告诉一个值,它已经是XML,要作为XML输出,然后使用query获取其XML。。。为什么?谢谢!就这样!这是我发布的解决方案的一个替代方案,只是使用.query而不是“*”Jamie,@DanField,您正在告诉一个值,它已经是XML,要作为XML输出,然后使用query获取其XML。。。为什么?这也是一个很好的方法。。也许这也是一个不太麻烦的方法。。我的部分假设是,可能有人希望从多行表变量中生成它,尽管实际情况是这样的。如果你只想要一行,那么这就足够了,应该是最有意义的了。@DanField,好吧,我明白你的意思了。。。WHERE ID=1听起来并不那么实际,但您是对的,在本例中,可以从表中的所有XML值创建多节点XML…因此,我的部分假设是,可能有人希望从表变量的多行中生成此值,即使实际情况是这样的。如果你只想要一行,那么这就足够了,应该是最有意义的了。@DanField,好吧,我明白你的意思了。。。WHERE ID=1听起来并不是那么实际,但您是对的,在本例中,可以从表中的所有XML值创建多节点XML。。。
SELECT @MyActualXMLOut = MyXML
FROM @MyTableVar
WHERE ID = 1;