УДАЛИТЬ из двух таблиц с одним предложением 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. Или триггер.