質問

次のような構造のテーブルがあります。

------------------------------
LocationID     | AccountNumber
------------------------------
long-guid-here | 12345
long-guid-here | 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 ページ, しかし、思うような結果は出ていません。


@KG、

実際、あなたのものは私にこの出力を与えました:

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

私はそれに固執するつもりです FOR XML EXPLICIT とりあえずクリス・レオンから。

役に立ちましたか?

解決

試す

SELECT
    1 AS Tag,
    0 AS Parent,
    AccountNumber AS [Root!1!AccountNumber!element]
FROM
    Location.LocationMDAccount
WHERE
    LocationID = 'long-guid-here'
FOR XML EXPLICIT

他のヒント

これを試してみてください、クリス:

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

大変申し訳ございません!あなたが求めていたものを混同してしまいました。私はメンテナンスの容易さから XML AUTO を好みますが、どちらも効果的であると考えています。見落としをお詫びします;-)

SQL Server 2005 (またはおそらく 2008) を使用すると、XML Explicit よりも XML PATH の方が SQL の保守がはるかに簡単であることがわかりました (特に SQL が長くなった場合)。

この場合:

SELECT AccountNumber as "clientID"
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML PATH (''), Root ('root');

私はそれを以下で得ました:

select
1 as tag,
null as parent,
AccountNumber as 'root!1!clientID!element'
from
Location.LocationMDAccount
where
locationid = 'long-guid-here'
for xml explicit
SELECT 1             as tag,
       null          as parent,
       AccountNumber as 'clientID!1!!element'
FROM Location.LocationMDAccount
WHERE locationid = 'long-guid-here'
FOR XML EXPLICIT, root('root')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top