更新时间:2022-06-07 22:26:18
SQL Server 一遍又一遍地为每个子选择添加命名空间,这是一个非常烦人的行为.
It is a very annoying behaviour, that SQL Server adds namespaces to each sub-select over and over.
您会在 SO 上找到很多解决方法,有些使用丑陋的 NVARCHAR(MAX)
强制转换以在字符串基础上插入命名空间,其他使用或多或少复杂的方式.
You will find a lot of workarounds here on SO, some use an ugly cast to NVARCHAR(MAX)
to insert the namespace on string base, other use more or less complicated ways.
对你来说最简单的应该是这样的:
For you the simplest should be this:
DECLARE @xml XML;
;WITH XMLNAMESPACES (DEFAULT 'http://abc.go.com')
SELECT @xml=
(
SELECT ID,Name
FROM @TEMP
FOR XML PATH('DefaultName'),ROOT('Person'),TYPE
);
DECLARE @d DATETIME=GETDATE();
DECLARE @mid VARCHAR(100)='11EXP'+REPLACE(convert(varchar(10),getdate(),103),'/','')+'1';
SET @xml.modify('insert (attribute MsgDtTm {sql:variable("@d")}
,attribute MessageId {sql:variable("@mid")}) into (/*:Person)[1]');
SELECT @xml;
请点击此链接,登录并投票.
这是一个持续年的众所周知的问题!..