SQL XML query() 使用 sql:variable 不工作
SQL XML query() using sql:variable not working
我正在尝试在 SQL Server 2008 R2 中编写一个标量值函数,它将采用 XML 和 XQuery 路径的块,以及 return 作为字符串的结果.暂时只看 T-SQL 来执行 XML XQuery,以下示例显示了两个语句 (1 & 2)。第一个显然应该有效,但没有。第二个是同样的事情,但没有使用 sql:variable()
.
declare @xml xml
set @xml = '<?xml version="1.0" encoding="UTF-8"?>
<Response version="1.0">
<Transaction>
<Processing>
<Return>Some text that I need to extract.</Return>
</Processing>
</Transaction>
</Response>'
declare @xquery varchar(100)
set @xquery = '/Response/Transaction/Processing/Return'
-- Statement 1 : This should work, but it doesn't
select
CAST(@xml.query('data(*[local-name(.) = sql:variable("@xquery")])') as varchar(max))
-- Statement 2 : This does work
select
CAST(@xml.query('data(/Response/Transaction/Processing/Return)') as varchar(max))
谁能告诉我为什么这不起作用?如果确实有可能,我做错了什么?
我已经在这个网站上查看了许多假定的工作示例,这就是我得出上述代码的方式,但我无法弄清楚为什么我的实现不起作用。
这不可能...
sql:variable 是为了传递某个值,而不是完整路径...
我知道的唯一机会是动态 SQL:
(顺便说一句:要检索一个值,你不应该使用 .query()
并转换它,最好使用 .value()
declare @xml xml
set @xml = '<?xml version="1.0" encoding="UTF-8"?>
<Response version="1.0">
<Transaction>
<Processing>
<Return>Some text that I need to extract.</Return>
</Processing>
</Transaction>
</Response>';
-- Statement "direct value"
select @xml.value('(/Response/Transaction/Processing/Return)[1]','varchar(max)');
--dynamic SQL
declare @xquery varchar(100)='(/Response/Transaction/Processing/Return)[1]'
declare @dynamicSQL NVARCHAR(100)='select @xml.value(''' + @xquery + ''',''varchar(max)'')';
exec sp_executesql @dynamicSQL, N'@xml XML',@xml;
我正在尝试在 SQL Server 2008 R2 中编写一个标量值函数,它将采用 XML 和 XQuery 路径的块,以及 return 作为字符串的结果.暂时只看 T-SQL 来执行 XML XQuery,以下示例显示了两个语句 (1 & 2)。第一个显然应该有效,但没有。第二个是同样的事情,但没有使用 sql:variable()
.
declare @xml xml
set @xml = '<?xml version="1.0" encoding="UTF-8"?>
<Response version="1.0">
<Transaction>
<Processing>
<Return>Some text that I need to extract.</Return>
</Processing>
</Transaction>
</Response>'
declare @xquery varchar(100)
set @xquery = '/Response/Transaction/Processing/Return'
-- Statement 1 : This should work, but it doesn't
select
CAST(@xml.query('data(*[local-name(.) = sql:variable("@xquery")])') as varchar(max))
-- Statement 2 : This does work
select
CAST(@xml.query('data(/Response/Transaction/Processing/Return)') as varchar(max))
谁能告诉我为什么这不起作用?如果确实有可能,我做错了什么?
我已经在这个网站上查看了许多假定的工作示例,这就是我得出上述代码的方式,但我无法弄清楚为什么我的实现不起作用。
这不可能... sql:variable 是为了传递某个值,而不是完整路径...
我知道的唯一机会是动态 SQL:
(顺便说一句:要检索一个值,你不应该使用 .query()
并转换它,最好使用 .value()
declare @xml xml
set @xml = '<?xml version="1.0" encoding="UTF-8"?>
<Response version="1.0">
<Transaction>
<Processing>
<Return>Some text that I need to extract.</Return>
</Processing>
</Transaction>
</Response>';
-- Statement "direct value"
select @xml.value('(/Response/Transaction/Processing/Return)[1]','varchar(max)');
--dynamic SQL
declare @xquery varchar(100)='(/Response/Transaction/Processing/Return)[1]'
declare @dynamicSQL NVARCHAR(100)='select @xml.value(''' + @xquery + ''',''varchar(max)'')';
exec sp_executesql @dynamicSQL, N'@xml XML',@xml;