Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Löschen mehrerer Knoten in einer einzelnen XQuery für SQL Server

Während das Löschen auf diese Weise etwas umständlich ist, können Sie stattdessen eine Aktualisierung durchführen, um die Daten zu ändern, vorausgesetzt, Ihre Daten sind einfach (wie in dem von Ihnen angegebenen Beispiel). Die folgende Abfrage teilt die beiden XML-Strings im Grunde in Tabellen auf, verbindet sie, schließt die Nicht-Null-Werte (übereinstimmende) aus und konvertiert sie zurück in XML:

UPDATE @table 
SET [column] = (
    SELECT p.i.value('.','int') AS c
    FROM [column].nodes('//i') AS p(i)
    OUTER APPLY (
        SELECT x.i.value('.','bigint') AS i
        FROM @parameter.nodes('//i') AS x(i)
        WHERE p.i.value('.','bigint') = x.i.value('.','int')
    ) a
    WHERE a.i IS NULL
    FOR XML PATH(''), TYPE
)