【问题标题】:MSSQL 2012: delete XML attribute by using a variableMSSQL 2012:使用变量删除 XML 属性
【发布时间】:2016-06-09 14:15:00
【问题描述】:

下午好,

我想通过使用 TSQL 变量来删除 XML 属性。这是一个最低限度的工作示例(TSQL 代码):

DECLARE @xml XML;
SET @xml = CONVERT(XML, N'
<recipe>
    <parameters>
        <parameter name="a" desc="A">ValueA</parameter>
        <parameter name="b" desc="B">ValueB</parameter>
        <parameter name="c" desc="C">ValueC</parameter>
    </parameters>
</recipe>
');
SET @xml.[modify]('delete (/recipe/parameters/parameter/@desc)');
SELECT  @xml;

这给出了所需的输出:所有属性“desc”已被删除:

<recipe>
  <parameters>
    <parameter name="a">ValueA</parameter>
    <parameter name="b">ValueB</parameter>
    <parameter name="c">ValueC</parameter>
  </parameters>
</recipe>

但是,我想定义一个 TSQL 变量

DECLARE @attr NVARCHAR(MAX) = N'desc';

如何将它传递给 XQuery 修改操作?我可以在 XML DML 中使用 sql:variable("@attr"),但是如何使用它来处理属性?

感谢您的帮助!

【问题讨论】:

    标签: sql-server xml xquery xml-dml


    【解决方案1】:

    您可以在指定属性时使用通配符,然后在谓词中检查属性的名称。

    SET @xml.[modify](
      'delete(/recipe/parameters/parameter/@*[local-name() = sql:variable("@attr")])');
    

    【讨论】:

    • 太棒了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2010-09-09
    相关资源
    最近更新 更多