簡體   English   中英

使用sql:variable的SQL XML query()不起作用

[英]SQL XML query() using sql:variable not working

我試圖在SQL Server 2008 R2中編寫一個標量值函數,該函數將使用XML塊和XQuery路徑,並將結果作為字符串返回。 暫時僅查看用於執行XML XQuery的T-SQL,以下示例顯示了兩個語句(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() ,最好采用.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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM