各位大牛,有这么一段sql,目的是为节点(FirstName="Johnson")更新对应的LastName,如果直接按照FirstName="Johnson"查找方式,则可以进行更新:DECLARE @authorsXML XMLSET @authorsXML = '
<Root>
<Author>
  <LastName>White</LastName>
  <FirstName>Johnson</FirstName>
</Author>
</Root>
'set @authorsXML.modify('
replace value of(/Root/Author[FirstName="Johnson"]/LastName/text())[1]
with ("CCC")
')
select '对FirstName="Johnson"的节点的LastName元素进行Update', @authorsXML
但如果采用变量方式sql:variable("@FirstName")对该节点进行更新LastName就不行了:
declare @FirstName varchar(10)='Johnson'
set @authorsXML.modify('
replace value of(/Root/Author[FirstName="{ sql:variable("@FirstName") }"]/MiddleInitial/text())[1]
with ("ddd")
')
select '对FirstName="Johnson"(变量形式)的节点的LastName元素进行Update', @authorsXML
望诸位能解救解救.

解决方案 »

  1.   

    不好意思,上面的描述个sql不一致了,这才是正确代码:DECLARE @authorsXML XMLSET @authorsXML = '
    <Root>
    <Author>
      <LastName>White</LastName>
      <FirstName>Johnson</FirstName>
    </Author>
    </Root>
    'set @authorsXML.modify('
    replace value of(/Root/Author[FirstName="Johnson"]/LastName/text())[1]
    with ("CCC")
    ')
    select '对FirstName="Johnson"的节点的LastName元素进行Update', @authorsXMLdeclare @FirstName varchar(10)='Johnson'
    set @authorsXML.modify('
    replace value of(/Root/Author[FirstName="{ sql:variable("@FirstName") }"]/LastName/text())[1]
    with ("ddd")
    ')
    select '对FirstName="Johnson"(变量形式)的节点的LastName元素进行Update', @authorsXML
      

  2.   

    DECLARE @authorsXML XMLSET @authorsXML = '
    <Root>
        <Author>
          <LastName>White</LastName>
          <FirstName>Johnson</FirstName>
        </Author>
         <Author>
          <LastName>White</LastName>
          <FirstName>Johnson1</FirstName>
        </Author>
    </Root>    
    '
    declare @FirstName nvarchar(20)='Johnson'
    set @authorsXML.modify('
        replace value of (/Root/Author/FirstName[text()=sql:variable("@FirstName")]/../LastName/text())[1]
        with ("ddd")
    ')
    select '对FirstName="Johnson"(变量形式)的节点的LastName元素进行Update', @authorsXML
    <Root>
      <Author>
        <LastName>ddd</LastName>
        <FirstName>Johnson</FirstName>
      </Author>
      <Author>
        <LastName>White</LastName>
        <FirstName>Johnson1</FirstName>
      </Author>
    </Root>路径表达不对