【发布时间】:2018-12-11 09:41:28
【问题描述】:
在 SQL 中使用“修改”插入一个 xml 变量,该变量在现有 xml 变量之间包含一个新标签。我已经设法通过硬编码 [5] 让它工作,但我正在尝试动态设置标签应该在哪里的值。下面的例子。我想将 [5] 动态设置为 @TotalNo 变量。我正在尝试计算主题的位置,然后只插入新标签。
以下工作,但其硬编码数字 5,但此值可能会根据不同的示例而改变,因为有时可能不是 CC,因此在这种情况下该值为 4。
@TotalNo 变量包含我需要输入的数字,但不知道如何在这个后面设置它(/ParameterValues/ParameterValue)[5]
DECLARE @comment XML = '<ParameterValue>
<Name>Comment</Name>
<Value>Test Report</Value>
</ParameterValue>'
DECLARE @XMLSettings XML = '<ParameterValues>
<ParameterValue>
<Name>TO</Name>
<Value>aaa</Value>
</ParameterValue>
<ParameterValue>
<Name>CC</Name>
<Value>bbb</Value>
</ParameterValue>
<ParameterValue>
<Name>IncludeReport</Name>
<Value>True</Value>
</ParameterValue>
<ParameterValue>
<Name>RenderFormat</Name>
<Value>PDF</Value>
</ParameterValue>
<ParameterValue>
<Name>Subject</Name>
<Value>New Report</Value>
</ParameterValue>
<ParameterValue>
<Name>IncludeLink</Name>
<Value>False</Value>
</ParameterValue>
<ParameterValue >
<Name>Priority</Name>
<Value>NORMAL</Value>
</ParameterValue>
</ParameterValues>'
DECLARE @TotalNo INT
SET @TotalNo = @XMLSettings.value('count(/ParameterValues/ParameterValue)', 'INT')
SET @TotalNo = @TotalNo - 2
SET @XMLSettings.modify('insert sql:variable("@comment") after (/ParameterValues/ParameterValue)[5]')
select @XMLSettings
尝试了以下方法:
SET @XMLSettings.modify('insert sql:variable("@comment") after (/ParameterValues/ParameterValue)[sql:variable("@TotalNo")]')
但得到这个错误:
Msg 2226, Level 16, State 1, Line 44 XQuery [modify()]: 的目标 'insert' 必须是单个节点,找到 'element(ParameterValue,xdt:untyped) *'
【问题讨论】: