从 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”这样的值
请提出解决方案!
最佳答案
value()
的参数函数必须是字符串文字。您不能用包含要执行的 XQuery 的变量/参数替换它。
来自 value() Method (xml Data Type)
语法
value (XQuery, SQLType)
XQuery
Is the XQuery expression, a string literal, that retrieves data inside the XML instance.
您尝试使用
sql:variable("@p_path")
将插入 @p_path
的值作为 XQuery 的字符串。它不会替换整个 XQuery 表达式。它将转换为类似 value('("x:ppr/x:sta")', 'varchar(100)')
的内容
关于xml - 在具有命名空间的函数中查询 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683412/