1

我想在从表中检索到的选定 XML 值中动态替换 XML 元素的值。这种替换需要由我想调用的函数执行。我什至无法开始找到任何线索来指引我正确的方向......

我有以下代码片段(不完整),我认为这是使用 XPath 获取我想要的元素的正确结构,并通过 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

首先,如果你想从一个函数中更新表数据,你是不允许这样做的。不过,您可以使用存储过程。您可以动态地向它发送“替换值”语句(来自上面的语法)并发送要替换的值。这是一些代码来演示我要说的内容:

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 回答