受け入れ答えが既にあり、偉大な、ちょうどいくつかのヒント:
あります1が経由してXMLを作成する必要があり、非常にまれな状況(特殊文字!)、数字(フォーマット!)、および日付/時刻値(文化とフォーマット!)これが良いことも可能ですが、ないSELECT ... FOR XML ...
DECLARE @RateAmt DECIMAL(12,4)=12.0;
を使用して、暗黙的な翻訳に頼るはるかに優れている:挿入するには、この
DECLARE @temp XML=(SELECT @RateAmt FOR XML PATH('Rate'));
あなたの試みをしてみてください
良い
DECLARE @temp XML = '<Rate>' + CONVERT(VARCHAR(20), @RateAmt, 1) +'</Rate>'
これを既存のXMLに組み込むことは、すでに行っている方法で行うことができます(外部にXML-nodeを作成してをそのまま)、それはプレーンな値を挿入する方が簡単かもしれません:
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>
良い答えですが、 1つのヒント:文字列の連結を介してXMLを作成するのは避けるべきです(ただし、これはOPの投稿からのものです)。さらに、さらに:あなたの 'UPDATE/INSERT'は、この' '-elementを既存のXMLに挿入しようとすると、OPのためには機能しませんでした。 –
Shnugo
XMLを作成するための文字列の連結は、 。 – Mike
私は知っている...それはちょうど避けるべきことです... – Shnugo