如何替换 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 字段中有一个 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 ""')