使用一个OUTPUT子句从两个表中删除?

时间:2010-05-20 15:29:41

标签: sql-server-2005 sql-delete output-clause

这将从Document表中删除文档,并将有关已删除文档的信息输出到FinishedDocument表中。

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

我不仅需要从Document表中删除文档,还需要从DocumentBackup表中删除该文档。同时,我需要保持插入FinishedDocument

所有这些只有一个声明是否可能?如果没有,则是第二个DELETE(针对DocumentBackup),所有这些都包含在一个事务中,要走的路?

2 个答案:

答案 0 :(得分:1)

您需要两个DELETE,但是您应该在第一个DELETE上使用两个OUTPUTS来同时插入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

答案 1 :(得分:0)

正如KM提到的,它是2次删除。

或假设您有FK的cascaded foreign key。或触发器。