目的の属性の名前を渡して XML 変数から XML 属性を取得しようとしています。最初の select ステートメントは問題なく機能し、正しい属性値を取得します。ただし、SQL 変数内で目的の属性名を設定しようとすると/root/attribs/@id
、実際の値ではなく文字列だけが表示されます。@path
私は変数 の多数の順列を試しましたが、すべて役に立ちませんでした。
ここで何が欠けていますか?
DECLARE @XMLString XML = '<root><attribs flags="1" id="test_id" platform="test_platform" /></root>';
SELECT
flags = x.c.value('(/root/attribs/@flags)[1]', 'nvarchar(50)') ,
id = x.c.value('(/root/attribs/@id)[1]', 'nvarchar(50)') ,
[platform] = x.c.value('(/root/attribs/@platform)[1]', 'nvarchar(50)')
FROM
@XMLString.nodes('/*') x ( c );
DECLARE @Path NVARCHAR(50) = '/root/attribs/@id';
SELECT
result = x.c.value('(sql:variable("@Path"))[1]', 'nvarchar(50)')
FROM
@XMLString.nodes('/*') x ( c );