12

我有一个结构如下的表:


位置 ID 帐号
长指南-这里 12345
长指南-这里 54321

要传递到另一个存储过程,我需要 XML 看起来像这样:

<root> 
    <clientID>12345</clientID>
    <clientID>54321</clientID>
</root>

到目前为止,我能做的最好的事情就是这样:

<root clientID="10705"/>

我正在使用这个 SQL 语句:

SELECT
    1 as tag,
    null as parent,
    AccountNumber as 'root!1!clientID'
FROM
    Location.LocationMDAccount
WHERE
    locationid = 'long-guid-here'
FOR XML EXPLICIT

到目前为止,我已经查看了 MSDN 页面上的文档,但还没有得到想要的结果。


@公斤,

你的实际上给了我这个输出:

<root>
  <Location.LocationMDAccount>
    <clientId>10705</clientId>
  </Location.LocationMDAccount>
</root>

我现在要坚持使用FOR XML EXPLICITChris Leon 的建议。

4

5 回答 5

3

尝试

SELECT
    1 AS Tag,
    0 AS Parent,
    AccountNumber AS [Root!1!AccountNumber!element]
FROM
    Location.LocationMDAccount
WHERE
    LocationID = 'long-guid-here'
FOR XML EXPLICIT
于 2008-08-05T20:51:03.547 回答
0

试试这个,克里斯:

SELECT
    AccountNumber as [clientId]
FROM
    Location.Location root
WHERE
    LocationId = 'long-guid-here'
FOR
    XML AUTO, ELEMENTS

非常抱歉!我把你要的东西弄混了。我更喜欢 XML AUTO 只是为了便于维护,但我相信任何一个都是有效的。我为疏忽道歉;-)

于 2008-08-05T20:53:13.230 回答
0

我得到了它:

select
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID!element'
from
Location.LocationMDAccount
where
locationid = 'long-guid-here'
for xml explicit
于 2008-08-05T20:53:19.157 回答
0

使用 SQL Server 2005(或可能是 2008),我发现 XML PATH 比 XML Explicit 更容易维护 SQL(特别是当 SQL 更长时)。

在这种情况下:

SELECT AccountNumber as "clientID"
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML PATH (''), Root ('root');
于 2008-08-17T06:45:16.703 回答
0
选择 1 作为标签,
       null 作为父母,
       AccountNumber 作为 'clientID!1!!element'
FROM Location.LocationMAccount
WHERE locationid = 'long-guid-here'
对于 XML 显式,root('root')
于 2011-10-31T11:28:56.920 回答