1

テーブルから取得される選択された XML 値で、XML 要素の値を動的に置き換えたいと考えています。この置換は、呼び出したい関数によって実行される必要があります。私を正しい方向に向ける手がかりを見つけることさえできません...

XPath を使用して必要な要素に到達し、関心のあるレコード (1 つ以上) を XPath で修飾するための正しい構造であると信じている次のコード スニペット (不完全) があります。呼び出された関数の結果を取得し、理想的にはその結果を sql:column に配置する方法:

UPDATE [database].[dbo].[table_with_xml]
    SET table_with_xml.modify('replace value of (//PrimaryApplicant/FName/text())[1] with sql:column("")')
    FROM [database].[dbo].[table_with_xml] AS [XML_Table]
    WHERE [XML_Table].XML_Field.value('(//HeaderData/CountryCode/text())[1]', 'varchar(100)') = '123'
4

1 に答える 1

0

まず第一に、関数からテーブル データを更新したい場合、それを行うことは許可されていません。ただし、ストアド プロシージャを使用できます。'replace value of' ステートメント (上記の構文から) を動的に送信し、置換する値を送信できます。私が言おうとしていることを示すコードを次に示します。

Create PROC changeXML
@xmlPath nvarchar(max), -- the statement 'replace value of'
@value nvarchar(max) -- the new value
AS
BEGIN
DECLARE @pathString nvarchar(max), @sql NVARCHAR(MAX);
-- create full statement dynamically
SET @pathString =  'replace value of ('+@xmlPath+'text())[1] with  ("'+@value+'")';
SELECT @pathString;
-- create dynamic sql and pass pathstring to it.
SET @sql = 'UPDATE [dbo].[tableWithXmlData] SET a.modify(''@p'')';
-- execute dynamic sql
EXEC sp_executesql @sql, N'@p nvarchar(max)', @p = @pathString
END

次に、次のように proc を実行します。

EXEC [dbo].[chnageXML] @xmlPath = N'path to your xml value', 
@value = N'new value'
于 2015-03-17T23:29:39.473 に答える