2

使用 SQL Server 2008。

我有一个单列单行的表变量。

如果我这样做:

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而不是_x0040_testsToRun

如何修改我的 FOR XML 语句/子句以提供正确的输出?

谢谢。

4

3 回答 3

4

试试这个 - 使用FOR XML PATH并使用您使用的列别名定义您的输出结构:

SELECT TOP 1
    testsId AS '@testsId'
FROM 
    @testsToRun
FOR XML PATH('testsToRun'), ROOT('testMessage') 

给我:

<testMessage>
  <testsToRun testsId="10" />
</testMessage>
于 2010-07-27T21:03:35.067 回答
1

尝试在临时表上使用别名:

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') 
于 2010-07-27T20:48:31.650 回答
0

x0040值是临时表的内部名称当您从常规表中选择时,您将获得正常输出(所以....选项可能是创建一个临时表,选择您想要的内容并将其从数据库中删除)。

于 2010-07-27T20:48:36.783 回答