我已经读过SO:XML 数据类型方法“值”必须是字符串文字 https://stackoverflow.com/q/11029674/62576但我的问题有点不同。我在一个变量中有一些 xml,我想将其分开并给出一个路径。最初我尝试过这个:
declare @x xml
select @x = '....'
select @x.value('(' + @path + ')[1]', 'varchar(max)')
但是,这当然失败了。然后我找到了 sql:variable 并尝试了这个:
select @x.value('(sql:variable("@path"))[1]', 'varchar(max)')
但奇怪的是,它返回了 @path 的值(为什么?)。我一直在搞乱它,但无法让它做正确的事情。
有人想吗?
您的选择返回的值@path
因为sql:variable()
返回一个文字值,因此实际上您要求 SQL Server 选择文字值@path
从文档中,确实如此。我知道做你想做的事情的唯一方法是使用动态 SQL,如下所示:
declare @xml xml = '
<root>
<element attr="test">blah</element>
</root>';
declare @p nvarchar(max) = '(//element/text())[1]';
declare @sql nvarchar(max)
= 'select @x.value(''' + @p + ''', ''nvarchar(max)'')';
exec sp_executesql @sql, @parameters = N'@x xml', @x = @xml;
但我应该警告你,这不是很好的做法(想想 SQL 注入、验证输入等)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)