удаление записей из нескольких таблиц одновременно с помощью одного запроса в sqlserver2005 - PullRequest
2 голосов
/ 23 апреля 2010

Я хочу удалить записи из дочерних таблиц, а также из родительской таблицы в одном запросе. пожалуйста, найдите запрос, приведенный ниже. здесь заголовок ответа - это первичная таблица, а responseid - первичный ключ.

DELETE FROM responseheader
    FROM responseheader
    INNER JOIN responsepromotion ON responseheader.responseid = responsepromotion.ResponseID
    INNER JOIN responseext ON responsepromotion.ResponseID=responseext.ResponseID 
    WHERE responseheader.responseid In ('67D8B9E8-BAD2-42E6-BAEA-000025D56253')

но его ошибка броска. Может ли кто-нибудь помочь мне найти правильный запрос

Ответы [ 3 ]

3 голосов
/ 23 апреля 2010

Если вы не используете какое-либо каскадное удаление, один оператор удаления удалит строки из одной таблицы.

В вашем примере, если синтаксис правильный, вы будете удалять строки только из responseheader, остальные таблицы используются только для определения, какие строки удалить из responseheader.

Если говорить прямо, вы действительно не хотите использовать каскадное удаление, поэтому вам нужно выполнить несколько операторов удаления, по одному в каждой таблице.

0 голосов
/ 23 апреля 2010

Как уже упоминалось, Lasse cascade delete - это единственный вариант удаления из нескольких таблиц одним запросом.Для этого вам необходимо установить внешний ключ и удалить запись в основной таблице.Там по строкам в дочерней таблице будут удалены.Но его лучше не использовать.Будет лучше использовать несколько операторов удаления.Вы также можете использовать транзакцию, установив для автоматической фиксации значение false.Затем удалите строки и вручную выполните фиксацию или откат, как требуется.

0 голосов
/ 23 апреля 2010

Вы можете создать хранимую процедуру и вызвать ее для удаления.Или вы можете использовать sp_executesql для отправки пакетных запросов за один раз, как показано ниже:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...