XML 节点中的 SQL 变量
Posted
技术标签:
【中文标题】XML 节点中的 SQL 变量【英文标题】:SQL Variable in XML Node 【发布时间】:2013-08-29 10:55:47 【问题描述】:我有以下代码:
DECLARE @x TABLE (item XML (document Galeries))
DECLARE @schemaname VARCHAR(100)
SET @schemaname = 'GaleriesSchem2'
INSERT into @x
SELECT '
<GaleriesSchem2>
<Image_1 OriginalName="Image">4814111.jpg</Image_1>
<Image_2 OriginalName="Image2">481411.jpg</Image_2>
</GaleriesSchem2>'
SELECT rref.value('.', 'varchar(MAX)') AS 'Value'
FROM @x
CROSS APPLY
item.nodes('//GaleriesSchem2/node()') AS Results(rref)
结果:
1 | 4814111.jpg
2 | 481411.jpg
但我想动态改变根元素,例如:
item.nodes('//[local-name()=sql:variable("@schemaname")]/node()') AS Results(rref)
但是这段代码不起作用。
【问题讨论】:
【参考方案1】:使用星号代替双斜线
DECLARE @x TABLE(item XML)
DECLARE @schemaname VARCHAR(100)
SET @schemaname = 'GaleriesSchem3'
INSERT into @x
SELECT '
<GaleriesSchem2>
<Image_1 OriginalName="Image">4814111.jpg</Image_1>
<Image_2 OriginalName="Image2">481411.jpg</Image_2>
</GaleriesSchem2>
<GaleriesSchem3>
<Image_1 OriginalName="Image">4814111_3.jpg</Image_1>
<Image_2 OriginalName="Image2">481411_3.jpg</Image_2>
</GaleriesSchem3>
'
SELECT rref.value('.', 'varchar(MAX)') AS 'Value'
FROM @x
CROSS APPLY
item.nodes('*[local-name()=sql:variable("@schemaname")]/node()') AS Results(rref)
在SQLFiddle
上查看演示
【讨论】:
以上是关于XML 节点中的 SQL 变量的主要内容,如果未能解决你的问题,请参考以下文章