所以基本上我有一个脚本可以根据这样的节点是否存在来更新 XML。这是 t-sql
DECLARE @newJob XML
SET @newJob = N'<job>
<job-detail>
<name>job-name</name>
</job-detail>
</job>'
;WITH XMLNAMESPACES(DEFAULT 'http://quartznet.sourceforge.net/JobSchedulingData')
UPDATE XmlTable
SET ConfigXml.modify('
insert sql:variable("@newJob")
as last into (/quartz)[1]')
WHERE ConfigXml.exist(N'//quartz/job/job-detail/name[.="job-name"]') = 0
现在一切都按预期工作,除了插入的节点现在包含像这样的空命名空间
<job xmlns="">
如果我删除
;WITH XMLNAMESPACES(DEFAULT 'http://quartznet.sourceforge.net/JobSchedulingData')
查询停止执行。我认为这是因为我的根节点定义了命名空间
<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" overwrite-existing-jobs="true">
所以我的问题是 - 有没有办法阻止这个命名空间添加到正在插入的节点中?