如何替换 SQL 中的 XML 节点值?

How do I replace an XML node value in SQL?

我在 sql 字段中有一个 xml 值

<Menu>
  <MenuItem>
    <MENU_ID>D</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>1,2,3,4,5</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>A</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>6,7</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>B</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>8,9,10</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>C</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>11,12,133</MENU_Write>
  </MenuItem>
</Menu>

我想用空白值替换 MENU_Write 节点的当前值 MENU_ID 节点值“C”。我该怎么做?

可以只使用简单的UPDATE和您想要的全文:

UPDATE table
SET xamlfield = 
'<Menu>
  <MenuItem>
    <MENU_ID>D</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>1,2,3,4,5</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>A</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>6,7</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>B</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>8,9,10</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID> </MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>11,12,133</MENU_Write>
  </MenuItem>
</Menu>'
WHERE id = 123

您可以尝试使用 SQL 服务器的 replace value of,例如:

declare @T XML = '<Menu>
  <MenuItem>
    <MENU_ID>D</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>1,2,3,4,5</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>A</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>6,7</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>B</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>8,9,10</MENU_Write>
  </MenuItem>
  <MenuItem>
    <MENU_ID>C</MENU_ID>
    <MENU_Read>1</MENU_Read>
    <MENU_Write>11,12,133</MENU_Write>
  </MenuItem>
</Menu>'

set @T.modify('replace value of (//MenuItem[MENU_ID="C"]/MENU_Write/text())[1] with ""')

SQL Fiddle