【问题标题】:Xquery delete with Xpath from sql:variableXquery 从 sql:variable 中使用 Xpath 删除
【发布时间】:2016-11-18 09:05:21
【问题描述】:

我有 Xpath 从 VARCHAR(MAX) 变量中的 XML 中删除,但 XML.modify('delete '+@MyXpath) 给出错误,

XML数据类型方法“modify”的参数1必须是字符串 字面意思。

DECLARE @myXML XML,
        @MyXpath VARCHAR(MAX)

-- Processing of Xpaths for components needed to remove 
-- Adding those in @XpathsToRemove     

SELECT TOP(1) @MyXpath = [XPATH]
FROM @XpathsToRemove

SET @myXML.modify('delete '+@MyXpath)

有没有什么方法可以删除那些在 @MyXpath 变量中可用的 Xpath 组件?

-- 编辑示例 XML

DECLARE @myXML XML ='<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Dont forget me this weekend!</body>
</note>'
      ,@MyXpath VARCHAR(MAX) = '//note/from'

      -- There are many Xpaths and dynamically generated with some processing so I don't want to hardcode Xpath there
      SET @myXML.modify('delete '+@MyXpath)

       --This doesn't works too
      -- SET @myXML.modify('delete "sql:variable("MyXPath")"')
      SELECT @myXML

【问题讨论】:

  • 有什么办法吗?简短回答:是的,动态创建的SQLEXEC。如果您需要帮助,您必须提供更多详细信息。你到底想达到什么目标?
  • @Shnugo 如果我创建 SQL 和 EXEC,则它无法与局部变量(即 @myXML)交互。我没有兴趣在 DB 端做任何更改,只是为了更新本地 @XML 变量
  • 您希望我如何提供帮助?我不知道你的变量,我也不知道你要介绍的XPath。一般来说:您尝试的方法都行不通!请提供一个工作示例:(简化的)XML 和工作语句,带有字面书写的.modify()。然后说明你想动态改变哪一部分,希望有人能提出解决方案。
  • 顺便说一句:它无法与局部变量交互你为什么这么认为?
  • DECLARE @myXML XML ='&lt;note&gt; &lt;to&gt;Tove&lt;/to&gt; &lt;from&gt;Jani&lt;/from&gt; &lt;heading&gt;Reminder&lt;/heading&gt; &lt;body&gt;Dont forget me this weekend!&lt;/body&gt; &lt;/note&gt;' ,@MyXpath VARCHAR(MAX) = '//note/from' SET @myXML.modify('delete '+@MyXpath)

标签: sql-server xml xpath xquery-sql


【解决方案1】:

谢谢大家,我得到了 EXEC 的解决方案来生成动态查询。 以下是解决我问题的链接,

How to using for loop using XQuery to delete xml nodes [duplicate]

解决方案,

DECLARE @str nvarchar(MAX)
SET @str = 'SET @MyXML.modify('+char(39)+'delete '+@MyXPath+'/*'+char(39)+'); '
EXEC sp_executesql  @str, N'@MyXML xml output', @MyXML output

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多