УДАЛИТЬ из двух таблиц с одним предложением OUTPUT? - PullRequest
1 голос
/ 20 мая 2010

При этом документ удаляется из таблицы Document и выводится информация об удаленном документе в таблицу FinishedDocument.

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

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

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

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Вам понадобятся два УДАЛЕНИЯ, но вы должны использовать два ВЫХОДА в первом УДАЛЕНИИ, чтобы выполнить вставку в 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
0 голосов
/ 20 мая 2010

Как упоминалось в КМ, это 2 удаления.

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

...