Это должно быть простым вопросом, но я еще не нашел четкий ответ. Кто-либо знает, как удалить несколько строк из единственной таблицы в SQL Server 2005, с помощью единого запроса? Я задался вопросом, могла ли это просто быть противоположность вставки нескольких строк, с помощью UNION ALL
метод. Таким образом, это работало бы?:
DELETE FROM Table (Name, Location)
SELECT 'Name1', 'Location1'
UNION ALL
SELECT 'Name2', 'Location2'
UNION ALL
SELECT 'Name3', 'Location3'
etc...
Править: Я должен указать, что это - таблица ссылки, из которой я пытаюсь удалить записи. Нет никакого первичного ключа, и любое из значений столбцов может повториться. Таким образом, я должен быть уверен, что оба столбца содержат определенное значение для той же записи, прежде чем я удалю запись.
Вы можете попробовать следующее:
DELETE FROM YourTable
WHERE (Name = 'Name1' AND Location = 'Location1')
OR (Name = 'Name2' AND Location = 'Location2')
OR (Name = 'Name3' AND Location = 'Location3')
Использование 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 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