XML 明示的な SQL Server 2005 - 書式設定に関するヘルプが必要
-
08-06-2019 - |
質問
次のような構造のテーブルがあります。
------------------------------
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')
所属していません StackOverflow