Sql server 2005 是否使用一个OUTPUT子句从两个表中删除?
这将从Sql server 2005 是否使用一个OUTPUT子句从两个表中删除?,sql-server-2005,sql-delete,output-clause,Sql Server 2005,Sql Delete,Output Clause,这将从文档表中删除文档,并将有关已删除文档的信息输出到完成文档表中 DELETE FROM Document OUTPUT Deleted.DocumentId , Deleted.DocumentDescription INTO FinishedDocument WHERE DocumentId = @DocumentId 我不仅需要从文档表中删除文档,还需要从文档备份表中删除文档。同时,我需要保持插入到FinishedDocument中 只有一条语句就可以实现所有这一切吗?如果不可
文档
表中删除文档,并将有关已删除文档的信息输出到完成文档
表中
DELETE
FROM Document
OUTPUT Deleted.DocumentId
, Deleted.DocumentDescription
INTO FinishedDocument
WHERE DocumentId = @DocumentId
我不仅需要从文档
表中删除文档,还需要从文档备份
表中删除文档。同时,我需要保持插入到FinishedDocument
中
只有一条语句就可以实现所有这一切吗?如果不可能,则是第二次
删除
(针对文档备份
),并将所有内容包装在一个事务中,这是一条路吗?您需要两次删除,但是,您应该在第一次删除时使用两个输出来执行插入FinishedDocument和插入表变量以保存所有删除的文档
尝试:
您将需要两次删除,但在第一次删除时应使用两个输出来执行插入FinishedDocument和插入表变量以保存所有删除的文档 尝试:
正如KM提到的,它是2次删除
或者假设你有一个FK。或者一个触发器。正如KM所提到的,它是两次删除
或者假设你有一个FK。或者一个触发器。在一个事务中,有人怎么会认为这比两次删除更可取(首先针对
备份文档
,然后针对文档
,将输出子句添加到完成文档
)呢?@lance,我不知道你在问什么?在任何情况下,您都必须进行2次删除,其中INSERT来自OUTPUT子句。如果先删除一个表再删除另一个表,这将是基于应用程序活动的首选项。我会先删除活动最少的表,因此如果有任何锁,它们的影响会更小。在事务中,有人怎么会认为这比两次删除更可取(首先针对BackupDocument
,然后针对Document
,将OUTPUT子句设置为finishedocument
)呢?@lance,我不知道你在问什么?在任何情况下,您都必须进行2次删除,其中INSERT来自OUTPUT子句。如果先删除一个表再删除另一个表,这将是基于应用程序活动的首选项。我会先删除最不活跃的表,所以如果有锁,它们的影响会更小。
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