MSSQL 2012:使用变量删除 XML 属性
MSSQL 2012: delete XML attribute by using a variable
下午好,
我想使用 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"),但如何使用它来寻址属性?
感谢您的帮助!
您可以在指定属性时使用通配符,然后在谓词中检查属性名称。
SET @xml.[modify](
'delete(/recipe/parameters/parameter/@*[local-name() = sql:variable("@attr")])');
下午好,
我想使用 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"),但如何使用它来寻址属性?
感谢您的帮助!
您可以在指定属性时使用通配符,然后在谓词中检查属性名称。
SET @xml.[modify](
'delete(/recipe/parameters/parameter/@*[local-name() = sql:variable("@attr")])');