У меня есть таблица db с столбцом XmlProperties с данными в виде массива Serialized .NET. Вот пример:SQL Server XML Update Сериализованный массив на основе соединения XQuery
<ArrayOfKeyValueOfstringanyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<KeyValueOfstringanyType>
<Key>CompanyName</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string">Company A</Value>
</KeyValueOfstringanyType>
<KeyValueOfstringanyType>
<Key>CompanyUrl</Key>
<Value xmlns:d3p1="http://www.w3.org/2001/XMLSchema" i:type="d3p1:string" />
</KeyValueOfstringanyType>
</ArrayOfKeyValueOfstringanyType>
Я хотел бы, чтобы обновить все элементы Value, где Key = "CompanyName"
и Value = "Company A"
и set Value = "Company A, LLC."
Есть другие пары ключ/значение в этой колонке, поэтому мне нужно обновление, чтобы применить только к этому ключ/значение сочетание. Компания
WITH KeyValues
AS (SELECT
Id,
key_value.value('./*:Key[1]', 'NVARCHAR(MAX)') AS [key],
key_value.value('./*:Value[1]', 'NVARCHAR(MAX)') AS [value]
FROM dbo.MyTable
CROSS APPLY XmlProperties.nodes('/*:ArrayOfKeyValueOfstringanyType/*:KeyValueOfstringanyType[*:Key="CompanyName" and *:Value="Company A"]') AS N (key_value))
SELECT
*
FROM KeyValues
Однако, я не могу показаться, чтобы выяснить, как применить ту же самую логику фильтрации в .modify заявлении заменить»:
Я могу запросить и получить результаты, используя этот запрос A "с" Компанией A, LLC. "
Я пытался что-то вроде этого без толку:
UPDATE dbo.MyTable
SET XmlProperties.modify('replace value of (/*:ArrayOfKeyValueOfstringanyType/*:KeyValueOfstringanyType/*:Value[../*:Key="CompanyName" and ../*:Value="Company A"]) with "Company A, LLC"')
Кто-нибудь получил элегантное решение? Я чувствую, что я рядом, но пока еще не взломал его.
Удивительный, работал как шарм! Спасибо за отличный ответ и объяснение деталей. – anderly