2012-09-12 54 views
0

我想修改mssql中的xml節點值,但我的方法似乎不起作用。無法修改T-SQL中的XML節點值(ms sql)

下面是一個XML示例:

<xml> 
    <ProjectManager> 
    <People> 
     <DisplayNames>John Smith</DisplayNames> 
     <LoginNames>ABC\jsmith</LoginNames> 
    </People> 
    </ProjectManager> 
</xml> 

我的函數的一部分:

CREATE FUNCTION [dbo].[MyFunc](
    @properties xml, 
    @key nvarchar(50), 
    @newvalue nvarchar(max), 
    @datatype nvarchar(50) = null, 
    @node nvarchar(50) = null) 
    RETURNS xml 
WITH SCHEMABINDING 
AS BEGIN 
    DECLARE @temp XML = @properties 

    IF LOWER(@datatype) = 'people' 
     SET @temp.modify('replace value of (/xml/*[local-name() = sql:variable("@key")][1]/People/*[local-name() = sql:variable("@node")]/text())[1] with sql:variable("@newvalue")') 

RETURN @temp; 
END 

調用函數:

set @result = dbo.MyFunc(@myXML,'ProjectManager','Somebody','People','DisplayName') 

回答

0

DisplayName在您的XML中是複數。

使用

set @result = dbo.MyFunc(@myXML,'ProjectManager','Somebody','People','DisplayNames')