【发布时间】: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
【问题讨论】:
-
有什么办法吗?简短回答:是的,动态创建的SQL和
EXEC。如果您需要帮助,您必须提供更多详细信息。你到底想达到什么目标? -
@Shnugo 如果我创建 SQL 和 EXEC,则它无法与局部变量(即
@myXML)交互。我没有兴趣在 DB 端做任何更改,只是为了更新本地@XML变量 -
您希望我如何提供帮助?我不知道你的变量,我也不知道你要介绍的
XPath。一般来说:您尝试的方法都行不通!请提供一个工作示例:(简化的)XML 和工作语句,带有字面书写的.modify()。然后说明你想动态改变哪一部分,希望有人能提出解决方案。 -
顺便说一句:它无法与局部变量交互你为什么这么认为?
-
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' SET @myXML.modify('delete '+@MyXpath)
标签: sql-server xml xpath xquery-sql