【发布时间】:2022-12-07 04:05:50
【问题描述】:
我正在编写一个存储过程,我可以在其中添加/修改任何具有 XML 列上提供的值的 XML 节点。 @XML xml, @NODENAME nvarchar(100) = NULL, @NODEVALUE nvarchar(max) 正在作为参数传递。该过程应将@NODENAME 的值作为节点名称插入,并将@NODEVALUE 作为值插入到@XML 字符串中。
例如:如果@XML 是<XML></XML>,@NODENAME 是'DISTRICT',@NODEVALUE 是'123',执行SP 后,你得到<XML><DISTRICT>123</DISTRICT></XML>。非常简单。
我已经完成了大部分用例,例如:
- 当节点存在非空非空值时:
SET @XML.modify('replace value of (/XML/*[local-name()=sql:variable("@NodeName")]/text())[1] with (sql:variable("@myVar"))')
- 当节点存在空值或空值时:
SET @XML.modify('insert text{sql:variable("@myVar")} into (/XML/*[local-name()=sql:variable("@NodeName")])[1]')
但我无法弄清楚如何获得以下用例:
- 节点不存在时
我有一个有效的硬编码版本:
SET @XML.modify('insert <DIVISION>{sql:variable("@myVar")}</DIVISION> into (/XML)[1]')
但是我需要使用不对节点进行硬编码的东西(在本例中为DIVISION)。
我试过这个但它不起作用:
SET @XML.modify('insert <{sql:variable("@myVar")}>{sql:variable("@myVar")}</{sql:variable("@myVar")}> into (/XML)[1]')
我得到XQuery [modify()]: Syntax error near '{'
我尝试了各种不同的方法,但我运气不好。 如何使用变量来表示将 NODE 插入到 XML 中?我使用微软服务器。
【问题讨论】:
标签: sql sql-server tsql xpath xquery