如果可以在 SQL Server (2012) 中的现有 xml 实例中动态插入 xml 节点,我无法找到任何文档。我知道您可以插入或替换条件值,但如果插入位置可以根据某些条件动态完成,似乎没有任何文档。例如,假设我有这个 XML-DML 调用:
SET @xml.modify('insert <SecondaryContact><Name>{ sql:variable("@contactName") }</Name>
<Phone>{ sql:variable("@contactPhone") }</Phone>
<Email>{ sql:variable("@contactEmail") }</Email></SecondaryContact>
after (/Project/PrimaryContact)[1]');
关键字后面列出的节点after
是有条件的修改是否是有效的语法?以下是我所指的示例:
SET @xml.modify('insert <TechnicalContact><Name>{ sql:variable("@contactName") }</Name>
<Phone>{ sql:variable("@contactPhone") }</Phone>
<Email>{ sql:variable("@contactEmail") }</Email></TechnicalContact>
after (
if(count(/Project/SecondaryContact) = 0)
then (/Project/PrimaryContact)[1]
else (/Project/SecondaryContact)(1)
)');
动态选择位置的唯一方法是IF..ELSE
在 XML DML 语句之外有语句,还是我的示例 XML-DML 有效?
编辑示例 XML:
<root>
...
<PrimaryContact Id="1234">
<Name>John Doe</Name>
<Phone>555-555-5555</Phone>
<Email>somewhere@test.com</Email>
</PrimaryContact>
<SecondaryContact Id="1236"> <--OPTIONAL
<Name>John Doe1</Name>
<Phone>555-555-5556</Phone>
<Email>somewhere1@test.com</Email>
</SecondaryContact>
<TechnicalContact Id="2234"> <--OPTIONAL
<Name>John Doe2</Name>
<Phone>555-555-5255</Phone>
<Email>somewhere3@test.com</Email>
</TechnicalContact>
...
</root>
我知道结构并不理想。应该是<Contacts><Contact Type="PRIMARY" Id="1234">...</Contact>...</Contacts>
,但想看看动态插入位置是否可能在 DML 语句中。这个问题可以使用光标,因为它可以用于一次性更新。