我需要为<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 数据类型方法“值”的参数 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