УДАЛИТЬ из двух таблиц с одним предложением OUTPUT?

Это удаляет документ из Document и выводит информацию об удаленном документе в FinishedDocument Таблица.

DELETE
FROM Document
OUTPUT Deleted.DocumentId
    , Deleted.DocumentDescription
INTO FinishedDocument
WHERE DocumentId = @DocumentId

Мне нужно удалить документ не только из Document стол, но и из DocumentBackup Таблица. Между тем мне нужно сохранить вставку в FinishedDocument,

Возможно ли все это только с одним утверждением? Если нет, это второй DELETE (против DocumentBackup), со всем этим, завернутым в транзакцию, путь?

2 ответа

Решение

Вам понадобятся два УДАЛЕНИЯ, но вы должны использовать два ВЫХОДА в первом УДАЛЕНИИ, чтобы выполнить как вставку в FinishedDocument, так и в табличную переменную, чтобы сохранить все удаленные документы.

пытаться:

DECLARE @DeletedDocuments table (DocumentId int)

BEGIN TRANSACTION

DELETE
    FROM Document
    OUTPUT Deleted.DocumentId, Deleted.DocumentDescription
        INTO FinishedDocument
    OUTPUT Deleted.DocumentId
        INTO @DeletedDocuments
WHERE DocumentId = @DocumentId

DELETE
    FROM DocumentBackup
    WHERE EXISTS (SELECT 1 FROM @DeletedDocuments d WHERE DocumentBackup.DocumentId=d.DocumentId)


COMMIT

Как упомянул KM, это 2 удаления.

Или каскадный внешний ключ, предполагая, что у вас есть FK. Или триггер.

Другие вопросы по тегам