WHILE ループを記述し、変数を xml クエリに渡す必要があります。
このロジックを考えると:
DECLARE @count INT = 0;
DECLARE @pointer INT = 0;
DECLARE @pointer_str varchar(100);
DECLARE @MyXML XML
SET @MyXML = '<SampleXML>
<Colors>
<Color1>White</Color1>
<Color2>Blue</Color2>
<Color3>Black</Color3>
<Color4 Special="Light">Green</Color4>
<Color5>Red</Color5>
</Colors>
<Colors>
<Color1>White</Color1>
<Color2>Blue</Color2>
<Color3>Black</Color3>
<Color4 Special="Light">Green</Color4>
<Color5>Red</Color5>
</Colors>
</SampleXML>'
SET @count =
(
SELECT
a.b.value('count(/SampleXML/Colors)', 'int')
FROM
@MyXML.nodes('data') a(b)
)
WHILE @count < @pointer
BEGIN
SELECT
a.b.value('Colors[' + @pointer + ']/Color1[1]','varchar(10)') AS Color1
FROM
@MyXML.nodes('SampleXML') a(b);
SELECT @pointer = @pointer + 1;
END
XML を解析するために SELECT ステートメントで次の変数を取得しようとしていますが、次のエラーが表示されます。
The argument 1 of the XML data type method "value" must be a string literal.
また、「1」のリテラル値を渡すと、選択がループ内で実行されていることがわかりません。誰かが私を助けてくれますか?