这将从Document
表中删除文档,并将有关已删除文档的信息输出到FinishedDocument
表中。
DELETE
FROM Document
OUTPUT Deleted.DocumentId
, Deleted.DocumentDescription
INTO FinishedDocument
WHERE DocumentId = @DocumentId
我不仅需要从Document
表中删除文档,还需要从DocumentBackup
表中删除该文档。同时,我需要保持插入FinishedDocument
。
所有这些只有一个声明是否可能?如果没有,则是第二个DELETE
(针对DocumentBackup
),所有这些都包含在一个事务中,要走的路?
答案 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。或触发器。