2010-07-17 33 views
5

Esto debería ser una pregunta directa, pero todavía no he encontrado una respuesta clara. ¿Alguien sabe cómo eliminar múltiples filas de una sola tabla en SQL Server 2005, utilizando una sola consulta? Me preguntaba si podría ser lo contrario de insertar varias filas, usando el método UNION ALL. Entonces, ¿esto funcionaría? :Eliminación de varias filas con una sola consulta

DELETE FROM Table (Name, Location) 
SELECT 'Name1', 'Location1' 
UNION ALL 
SELECT 'Name2', 'Location2' 
UNION ALL 
SELECT 'Name3', 'Location3' 
etc... 

EDITAR: Debo señalar que se trata de una mesa de enlace que estoy tratando de eliminar registros de. No hay una clave principal, y cualquiera de los valores de las columnas puede repetirse. Así que necesito asegurarme de que ambas columnas contengan un cierto valor para el mismo registro antes de eliminar el registro.

Respuesta

9

Usted podría intentar esto:

DELETE FROM YourTable 
WHERE (Name = 'Name1' AND Location = 'Location1') 
OR (Name = 'Name2' AND Location = 'Location2') 
OR (Name = 'Name3' AND Location = 'Location3') 
+0

Un rango donde la cláusula puede ser apropiada, si dice que quería eliminar una colección antes de una fecha determinada. –

1
DELETE FROM T 
FROM YourTable T 
INNER JOIN (
SELECT 'Name1' AS Name, 'Location1' AS Location 
UNION ALL 
SELECT 'Name2', 'Location2' 
UNION ALL 
SELECT 'Name3', 'Location3' 
) T2 
ON T2.Name = T.Name 
AND T2.Location = T.Location 
+0

'FROM ' en ese enlace implica JOINs están permitidos. Estoy seguro de que son como los he usado muchas veces. :) –

+1

Acabo de probar contra MSSQL 2005 y funciona bien OMG Ponies. –

2

Usando un CTE trabajó para mí - mucho más fácil de utilizar RUP y entre paréntesis:

WITH del AS (
    SELECT 'Name1' AS nam, 'Location1' AS loc 
    UNION ALL 
    SELECT 'Name2', 'Location2' 
    UNION ALL 
    SELECT 'Name3', 'Location3') 
DELETE FROM CLASSES 
WHERE EXISTS(SELECT NULL 
       FROM del d 
       WHERE d.name = name 
       AND d.loc = location) 

no se puede definir un alias de la tabla de la tabla en una declaración de eliminación; se puede suponer que cualquier referencia de columna sin un alias de tabla se relaciona con la única tabla sin una, pero también depende del alcance.

Cuestiones relacionadas