Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 是否使用一个OUTPUT子句从两个表中删除?_Sql Server 2005_Sql Delete_Output Clause - Fatal编程技术网

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