无法在T-SQL中修改XML节点的值(ms sql)

时间:2012-09-12 08:50:23

标签: xml tsql xml-dml

我想在mssql中修改我的xml节点值,但我的方法似乎不起作用。

以下是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')

1 个答案:

答案 0 :(得分:0)

您的XML中的DisplayName是复数。

使用

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