テーブルの行ごとに異なるものをプルする必要があり<node>
ます。ノードの位置はに格納されますSpecificNode
DECLARE @table TABLE
(
XmlValue XML,
SpecificNode INT
)
INSERT INTO @table SELECT '<root><node>Y</node><node>Y</node><node>10</node><node>YARD</node></root>', 3
INSERT INTO @table SELECT '<root><node>N</node><node>20</node><node>PART</node><node></node><node>PASS</node></root>', 2
INSERT INTO @table SELECT '<root><node>Y</node><node>30</node><node>FORK</node></root>', 2
指定されたノードをプルできますが、動的にしようとすると、「xmlデータ型メソッド「value」の引数1は文字列リテラルでなければなりません」というエラーが表示されます。
SELECT
XmlValue.value('(/root/node)['+SpecificNode+']', 'VARCHAR(100)')
FROM @table AS tbl
これと同じエラー
SELECT
x.value,
XmlValue.value(x.value, 'VARCHAR(100)')
FROM @table AS tbl
CROSS APPLY (SELECT '(/root/node)['+CONVERT(VARCHAR, SpecificNode)+']' as value) X
私の期待する出力は
10
20
30