0

我想在 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')
4

1 回答 1

0

DisplayName is plural in your XML.

Use

set @result = dbo.MyFunc(@myXML,'ProjectManager','Somebody','People','DisplayNames')
于 2012-09-12T08:54:39.307 回答