Sql server 使用XML自动设置表格变量输出的格式
使用SQLServer2008 我有一个单列单行的表变量 如果我这样做:Sql server 使用XML自动设置表格变量输出的格式,sql-server,xml,explicit,Sql Server,Xml,Explicit,使用SQLServer2008 我有一个单列单行的表变量 如果我这样做: Declare @testsToRun Table ( testsId BigInt ) Insert Into @testsToRun Select testsId From tests Where testsId = 10 Select Top 1 * From @testsToRun For Xml Auto , Type , Root('testMessage') 我得到的XML如下所示: <testM
Declare @testsToRun Table ( testsId BigInt )
Insert Into @testsToRun
Select testsId From tests Where testsId = 10
Select Top 1 * From @testsToRun
For Xml Auto , Type , Root('testMessage')
我得到的XML如下所示:
<testMessage>
<_x0040_testsToRun testsId="10" />
</testMessage>
当我真正想要的是:
<testMessage>
<testsToRun testsId="10" />
</testMessage>
如果行源是一个表,那么它似乎可以正常工作。当它是一个表变量时,我得到一个我不想要的子元素标签,我想要testsToRun
,而不是\u x0040\u testsToRun
如何修改FOR XML语句/子句以提供适当的输出
谢谢。尝试在临时表上使用别名:
Declare @testsToRun Table ( testsId BigInt )
Insert Into @testsToRun
Select testsId From tests Where testsId = 10
Select Top 1 * From @testsToRun testsToRun
For Xml Auto , Type , Root('testMessage')
x0040值是临时表的内部名称。当您从常规表中选择时,您将获得正常的输出(因此…选项可以是创建临时表,选择所需内容并从数据库中删除)。尝试此操作-使用
FOR XML PATH
并使用您使用的列别名(ses)定义输出结构:
给我:
<testMessage>
<testsToRun testsId="10" />
</testMessage>
虽然这将我的内容从基于属性更改为基于元素(使整个消息变大),但更改消息阅读器代码非常简单。这很有效。谢谢@ScSub:这是如何变为基于元素的??它将testsId
作为一个属性提供给您——就像您在原始帖子中指定的那样。。。。
<testMessage>
<testsToRun testsId="10" />
</testMessage>