我想在从表中检索的选定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'
答案 0 :(得分: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'