Sql server 使用XML自动设置表格变量输出的格式

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

使用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如下所示:

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