我試圖更新XML字符串中複雜類型的一部分的元素。 where子句被忽略,字符串的第一個元素是唯一被解開的元素。SQL Server 2008 R2表更新XML列修改忽略where子句
XML架構集合(簡化形式):
<element name="rangeDef">
<complexType>
<sequence>
<element maxOccurs="unbounded" name="defs">
<complexType>
<sequence>
<element name="ID" type="string"/>
<element name="available" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
填充字符串爲:
<rangeDef>
<defs>
<ID>AA</ID>
<available>Y</available>
</defs>
<defs>
<ID>AB</ID>
<available>Y</available>
</defs>
<defs>
<ID>AC</ID>
<available>Y</available>
</defs>
<defs>
<ID>AD</ID>
<available>Y</available>
</defs>
<defs>
<ID>AE</ID>
<available>Y</available>
</defs>
</rangeDef>
,這是保存在一個表 - >testDef (key char(10), rangeDef xml)
UPDATE語句:
update testDef
set rangeDef.modify('replace value of (//defs/available)[1] with "N"')
where rangeDef.exist ('//defs[ID = sql:variable("@myValue")] = 1 and
key = @myKey
@myValue
被聲明爲char(2)
並設置爲'AD'
@myKey
是簡單的搜索關鍵字。
隨着(//...)[1]的修改語法,選擇一個節點作爲XML字符串中的第一個節點,並忽略where子句。不知道在語法中需要哪些更正,例如rangeDef.exist將尋找XML字符串的適當元素。我的想法是,我應該使用position()函數,而不是指示[1],但我不清楚它是如何實現的。