2014-06-11 31 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 

感谢您的帮助!