我在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
”,并带有空值。我该怎么做?
答案 0 :(得分:1)
您可以尝试使用SQL Server的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 强>
答案 1 :(得分:0)
你可以只使用一个简单的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