使用 FOR XML AUTO 设置表变量输出的格式

发布于 2024-09-11 20:21:58 字数 705 浏览 6 评论 0原文

使用 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 语句/子句以获得正确的输出?

谢谢。

Using SQL Server 2008.

I have a table variable with a single column and single row.

If I do this:

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

I get XML that looks like this:

<testMessage> 
    <_x0040_testsToRun testsId="10" />
</testMessage>

When what I actually want is:

<testMessage>
    <testsToRun testsId="10" />
</testMessage>

If the row source is a table, that seems to work fine. When it is a table variable I get a child element label I don't want, I want testsToRun and not _x0040_testsToRun.

How can I rework my FOR XML statement/clause to give me proper output?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回忆凄美了谁 2024-09-18 20:21:58

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

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

给我:

<testMessage>
  <testsToRun testsId="10" />
</testMessage>

Try this instead - use FOR XML PATH and define your output structure with the column alias(ses) you use:

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

Gives me:

<testMessage>
  <testsToRun testsId="10" />
</testMessage>
傻比既视感 2024-09-18 20:21:58

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

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

Try using an alias on the temp table:

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') 
别念他 2024-09-18 20:21:58

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

The x0040 value is the internal name for the temporary table. You will get normal output when you select from a regular table (so.... the option could be to create a temp table, select what you want and drop it from the db).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文