1

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

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

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

这一切都可能只用一个语句吗? 如果不是,那么第二个DELETE(反对DocumentBackup),所有这些都包含在一个事务中,要走的路吗?

4

2 回答 2

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
于 2010-05-20T15:38:43.237 回答
0

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

或者假设您有 FK,则使用级联外键。或者触发器。

于 2010-05-20T15:47:22.650 回答