SQL 中 Xml.Modify 中的 XML 列的 Xquery 服务器不工作
Xquery with XML column in Xml.Modify in SQL Server not working
我正在尝试修改 XML 中的节点,它在插入主要 XML this xmlfields where groupid = @groupid element 和qubefieldId = @i
谁能告诉我为什么这不起作用?
Update @temp
Set xmlField.modify('replace value of (/ArrayOfQubeField/QubeField[QubeFieldID = sql:variable("@i")]/text())[1] with sql:variable ("@newID")')
Where XmlField.exist('/ArrayOfQubeField/QubeField[GroupID = sql:variable ("@groupID")][QubeFieldID = sql:variable("@i")]') = 1;
这是xml
<ArrayOfQubeField xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<QubeField>
<QubeFieldID>1</QubeFieldID>
<GroupID>1</GroupID>
<QubeFieldName>ID</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>0</Order>
</QubeField>
<QubeField>
<QubeFieldID>1</QubeFieldID>
<GroupID>4</GroupID>
<QubeFieldName>Name</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>1</Order>
</QubeField>
<QubeField>
<QubeFieldID>2</QubeFieldID>
<GroupID>3</GroupID>
<QubeFieldName>Town</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>2</Order>
</QubeField>
<QubeField>
<QubeFieldID>1</QubeFieldID>
<GroupID>3</GroupID>
<QubeFieldName> Name</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>3</Order>
</QubeField>
<QubeField>
<QubeFieldID>13</QubeFieldID>
<GroupID>1</GroupID>
<QubeFieldName>Migrated</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>4</Order>
</QubeField>
<QubeField>
<QubeFieldID>16</QubeFieldID>
<GroupID>1</GroupID>
<QubeFieldName>Date</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>5</Order>
</QubeField>
</ArrayOfQubeField>
您在 XPath 中缺少 QubeFieldID
,请尝试这样的操作:
update @temp set
xmlField.modify('
replace value of
(/ArrayOfQubeField/QubeField[GroupID = sql:variable ("@groupID")]/QubeFieldID[. = sql:variable("@i")]/text())[1]
with sql:variable("@newID")
')
我正在尝试修改 XML 中的节点,它在插入主要 XML this xmlfields where groupid = @groupid element 和qubefieldId = @i
谁能告诉我为什么这不起作用?
Update @temp
Set xmlField.modify('replace value of (/ArrayOfQubeField/QubeField[QubeFieldID = sql:variable("@i")]/text())[1] with sql:variable ("@newID")')
Where XmlField.exist('/ArrayOfQubeField/QubeField[GroupID = sql:variable ("@groupID")][QubeFieldID = sql:variable("@i")]') = 1;
这是xml
<ArrayOfQubeField xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<QubeField>
<QubeFieldID>1</QubeFieldID>
<GroupID>1</GroupID>
<QubeFieldName>ID</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>0</Order>
</QubeField>
<QubeField>
<QubeFieldID>1</QubeFieldID>
<GroupID>4</GroupID>
<QubeFieldName>Name</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>1</Order>
</QubeField>
<QubeField>
<QubeFieldID>2</QubeFieldID>
<GroupID>3</GroupID>
<QubeFieldName>Town</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>2</Order>
</QubeField>
<QubeField>
<QubeFieldID>1</QubeFieldID>
<GroupID>3</GroupID>
<QubeFieldName> Name</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>3</Order>
</QubeField>
<QubeField>
<QubeFieldID>13</QubeFieldID>
<GroupID>1</GroupID>
<QubeFieldName>Migrated</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>4</Order>
</QubeField>
<QubeField>
<QubeFieldID>16</QubeFieldID>
<GroupID>1</GroupID>
<QubeFieldName>Date</QubeFieldName>
<QubeFieldSelected>true</QubeFieldSelected>
<Order>5</Order>
</QubeField>
</ArrayOfQubeField>
您在 XPath 中缺少 QubeFieldID
,请尝试这样的操作:
update @temp set
xmlField.modify('
replace value of
(/ArrayOfQubeField/QubeField[GroupID = sql:variable ("@groupID")]/QubeFieldID[. = sql:variable("@i")]/text())[1]
with sql:variable("@newID")
')