2010-05-20 31 views
1

這將從Document表中刪除文檔,並將有關已刪除文檔的信息輸出到FinishedDocument表中。使用一個OUTPUT子句從兩個表中刪除?

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

我需要不只是從Document表,但也從DocumentBackup表中刪除該文件。同時,我需要保持插入FinishedDocument

這一切只有一個語句可能嗎?如果沒有,是第二個DELETE(針對DocumentBackup),它的所有包裹在一個交易中,要走的路?

回答

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 
+0

某人在事務中可能會如何將這看作優於兩次刪除(首先針對'BackupDocument',然後針對'Document',OUTPUT子句爲'FinishedDocument')? – lance 2010-05-20 15:40:14

+0

@lance,我不確定你在問什麼?無論如何,你必須有2個DELETE,INSERT來自OUTPUT子句。如果先刪除一個表格,那麼這將是基於應用程序活動的首選項。我會先刪除最不活躍的表,如果有鎖,它們的影響就會減小。 – 2010-05-20 19:28:02

0

由於公里提到的,這是2個刪除。

或假設你有FK的cascaded foreign key。或者一個觸發器。