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,因为如果您的目标是客户端应用程序或表变量,则计划将被强制串行。