2014-06-11 109 views
0

有沒有辦法將變量傳遞給.exist()方法?下面是我在SQL Server管理運行2012原代碼:將變量傳遞給`.exist()`方法?

CREATE TABLE #ExtractXML(xmldata xml) 
    insert into #ExtractXML (xmldata) 
    SELECT   
      CASE WHEN FormResults.XMLFormFields.exist('(/form/PalletItems/Items)[1]') = 0 then NULL 
      ELSE  FormResults.XMLFormFields.query('(/form/PalletItems/Items)[1]') END  
    FROM FormResults 
    where FormTypeID = @FormTypeID 

我想保存這些:'(/form/PalletItems/Items)[1]'作爲可變@XMLPath VARCHAR(100)。我以爲我可以簡單地插入這樣的:

SELECT   
      CASE WHEN FormResults.XMLFormFields.exist(@XMLPath) = 0 then NULL 
      ELSE  FormResults.XMLFormFields.query(@XMLPath) END  
    FROM FormResults where FormTypeID = 1 

,但我得到一個錯誤,指出:The argument 1 of the XML data type method "exist" must be a string literal.

做任何你有什麼建議?非常感謝!

回答

2
+0

感謝您的回覆!但是,如果沒有OPENXML,你有沒有建議如何做到這一點? – user3281388

+0

@ user3281388這不是openxml。 –

+0

除非@Xpaths爲空,否則此答案將始終返回1。它不檢查節點的存在。 –

0

我能找到這個問題的答案對這個職位通過的Mikael埃裏克森: https://stackoverflow.com/a/9240960/3281388

這是類似於匿名說的,但它的加入本地-名稱()。這裏是我的新改進代碼,如下所示:

CREATE TABLE #ExtractXML(xmldata xml) 
    insert into #ExtractXML (xmldata) 
    SELECT  
    CASE WHEN FormResults.XMLFormFields.exist('(//*[local-name() = sql:variable("@parent")])[1]') = 0 then NULL 
    ELSE  FormResults.XMLFormFields.query('(//*[local-name() = sql:variable("@parent")])[1]') END  
    FROM FormResults 

感謝您的幫助!