从XML中检索数据时遇到问题。
with xmlnamespaces ('x-elements' as x)
select
tb.[Profile].value('(x:ppr/x:static/refId)[1]', 'varchar(22)') testCol
from table1 tb
以上代码完美无缺。但是,当我在函数中传递XML路径时,它会正确编译,但不会在调用时返回数据,而只是xml路径(传递给它)。
CREATE FUNCTION testFunc
(
@p varchar(22)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @Rs nvarchar(max);
with xmlnamespaces ('x-elements' as x)
select
@Rs = tb.[Profile].value('(sql:variable("@p_path"))[1]', 'nvarchar(max)')
from table1 tb
RETURN (@Rs)
END
我得到的结果是“x:ppr / x:sta”(这是一个不是值的路径),而它应该返回一个像“aJxk9pGntc5V”这样的值 请提出解决方案!
答案 0 :(得分:1)
value()
函数的参数必须是字符串文字。您不能将其替换为包含要执行的XQuery的变量/参数。
来自value() Method (xml Data Type)
<强>语法强>
value(XQuery,SQLType)
<强>的XQuery 强>
XQuery表达式是一个字符串文字,用于检索数据 在XML实例中。
您尝试使用sql:variable("@p_path")
会将@p_path
的值作为字符串插入XQuery。它不会取代整个XQuery表达式。它会转换为类似value('("x:ppr/x:sta")', 'varchar(100)')