sql >> Base de Datos >  >> RDS >> Sqlserver

Eliminación de varios nodos en un solo XQuery para SQL Server

Si bien la eliminación es un poco incómoda de hacer de esta manera, en su lugar puede hacer una actualización para cambiar los datos, siempre que sus datos sean simples (como el ejemplo que dio). La siguiente consulta básicamente dividirá las dos cadenas XML en tablas, las unirá, excluirá los valores no nulos (coincidentes) y los convertirá de nuevo a 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
)