有没有办法删除插入的数据,反之亦然?

Rac*_*SQL 3 sql-server t-sql sql-server-2014

我正在尝试在同一查询中插入数据然后删除数据。

我试图将其分块删除,以免导致日志问题:

DECLARE @BatchSize INT
SET @BatchSize = 100000

WHILE @BatchSize <> 0
BEGIN 
   
DELETE (@BatchSize) TABLE1 
WHERE   LogType = 'LOGTYPE'
AND     TABLE1.Id NOT IN (SELECT Id FROM TABLE2)
AND     TABLE1.Id IN     (SELECT Id FROM DifferentDB..TABLE3)
    
   SET @BatchSize = @@rowcount 
END
Run Code Online (Sandbox Code Playgroud)

但同样的查询,我想先在辅助数据库中插入数据,然后删除。

是否可以在没有触发器的情况下实现?(插入、删除……)

我也愿意接受更好的分块删除方法,我只是凭记忆得到了这个方法。

Eri*_*ing 14

这很容易做到。我之前在这里写过相关文章:简化归档流程

示例查询看起来有点像这样:

INSERT 
    dbo.Votes_Archive
(
    Id, 
    PostId, 
    UserId, 
    BountyAmount, 
    VoteTypeId, 
    CreationDate
)
SELECT 
    v.*
FROM 
(
    DELETE v
        OUTPUT
            Deleted.Id,
            Deleted.PostId,
            Deleted.UserId,
            Deleted.BountyAmount,
            Deleted.VoteTypeId,
            Deleted.CreationDate
    FROM dbo.Votes AS v
    WHERE v.UserId = 190597
) AS v;
Run Code Online (Sandbox Code Playgroud)

您确实需要小心 OUTPUT,因为如果您的目标是客户端应用程序或表变量,则计划将被强制串行。