【问题标题】:XQUERY - modify using multiple variablesXQUERY - 使用多个变量进行修改
【发布时间】: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


    【解决方案1】:

    我有一个解决方案,虽然不完美,但仍然是一个解决方案。我没有尝试在一行中找到解决方案,而是将其分为两部分:

    DECLARE @NewNode XML=CAST('<'+@NodeName+'>'+@myVar + '</' + @NodeName + '>' as XML)
    SET @XML.modify('insert sql:variable("@NewNode") into (/XML)[1]') 
    

    我仍然不知道是否可以使用单行解决方案,如果可以并且有人发布了它,我会将其标记为 asnwer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多