这应该是一个简单的问题,但我还没有找到一个明确的答案。有没有人知道如何使用单个查询从SQL Server 2005中的单个表中删除多行?我想知道它是否恰好与使用UNION ALL
方法插入多行相反。这会有用吗? :
DELETE FROM Table (Name, Location)
SELECT 'Name1', 'Location1'
UNION ALL
SELECT 'Name2', 'Location2'
UNION ALL
SELECT 'Name3', 'Location3'
etc...
编辑:我应该指出这是一个我正在尝试删除记录的链接表。没有主键,任何列的值都可能重复。因此,在删除记录之前,我需要确保两列都包含同一记录的特定值。
答案 0 :(得分:10)
你可以试试这个:
DELETE FROM YourTable
WHERE (Name = 'Name1' AND Location = 'Location1')
OR (Name = 'Name2' AND Location = 'Location2')
OR (Name = 'Name3' AND Location = 'Location3')
答案 1 :(得分:2)
使用CTE对我有用 - 比使用OR和括号更容易:
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)
您无法在delete语句中为表定义表别名;没有表别名的任何列引用都可以假定与唯一没有表的列相关,但它也取决于范围。
答案 2 :(得分: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