有一個公認的答案已經(特別是關於您的命名空間的問題),偉大的,只是一些提示:
有非常罕見的情況,其中一個應該通過創建XML字符串連接...特別是與字符串(特殊字符!),數字(格式!)和日期/時間值(文化和格式!)是更好的使用SELECT ... FOR XML ...
DECLARE @RateAmt DECIMAL(12,4)=12.0;
這是可能的,但不是很好的依靠隱式轉換:
DECLARE @temp XML = '<Rate>' + CONVERT(VARCHAR(20), @RateAmt, 1) +'</Rate>'
更好試試這個
DECLARE @temp XML=(SELECT @RateAmt FOR XML PATH('Rate'));
你試圖插入這到現有的XML可以完成你已經做到的方式(從外部創建XML節點並插入它原樣),可能更容易插入普通值:
DECLARE @tbl TABLE(ID INT IDENTITY,XMLValue XML);
INSERT INTO @tbl VALUES
(N'<Element1><Element2><test>FirstTest</test></Element2></Element1>')
,(N'<Element1><Element2><test>Second</test></Element2></Element1>');
--ID=1: Insert the way you do it:
UPDATE @tbl
SET [XMLValue].modify('insert sql:variable("@temp") as last into (/Element1/Element2)[1]')
WHERE id = 1
--ID=2: Insert the value of @RateAmt directly
SET @RateAmt=100.00;
UPDATE @tbl
SET [XMLValue].modify('insert <Rate>{sql:variable("@RateAmt")}</Rate> as last into (/Element1/Element2)[1]')
WHERE id = 2
這是結果ID = 1
<Element1>
<Element2>
<test>FirstTest</test>
<Rate>12.0000</Rate>
</Element2>
</Element1>
和id = 2
<Element1>
<Element2>
<test>Second</test>
<Rate>100</Rate>
</Element2>
</Element1>
很好的回答,投票這件事,但一個提示:你應該避免通過字符串連接來創建XML ......(儘管這是來自OP的文章)。還有更多的:你的'UPDATE/INSERT'對於OP來說不起作用,因爲他試圖在現有的XML中插入這個''元素...... –
Shnugo
創建XML的字符串連接來自最初的文章,而不是我的設計。 – Mike
我知道...這只是要避免... – Shnugo