sql-server - SQL Server 逐行删除并提交多条记录
问题描述
我有一个场景,我需要从表中删除每一行,但一次提交多行。
例如:我有一个表#temp1
应该删除 100 条记录。但是每删除 10 条记录后,我需要提交这 10 条删除,依此类推。因此,在我必须提交 10 次以提交所有 100 条删除但循环 100 次以删除所有 100 条记录之后。
我尝试了循环和事务。下面的示例:
BEGIN TRANSACTION
While (@rowsdeleted <= @rowstodelete)
BEGIN
Delete records where condition is match
SET @deletedrows = @@rowcount
END
IF (deletedrows = 10)
BEGIN
COMMIT TRANSACTION
SET deletedrows =0
END
这个逻辑每次提交只提交一行。这将删除 10 条记录,当提交条件匹配时,它只提交最后删除的记录,其他 9 条记录不提交。
有没有人有任何解决方案或逻辑来实现这个问题?
解决方案
declare
@check_tran int,
@deletedrows int,
@total_deletedrows int,
@max_delete int
begin
set @max_delete = 100;
set @check_tran = 0
set @total_deletedrows =0
BEGIN TRANSACTION
While (@total_deletedrows <= @max_delete)
BEGIN
Delete records where condition is match
SET @deletedrows = @@rowcount
SET @check_tran = @check_tran + @deletedrows
SET @total_deletedrows = @total_deletedrows + @deletedrows
print @deletedrows
if (@check_tran >= 10)
begin
COMMIT TRANSACTION
SET @check_tran = 0
BEGIN TRANSACTION
end
END
-- when record count of table will be 105 records then 5 records are not be commited
-- so if transaction count > 0 then commit transaction
if (@@TRANCOUNT>0)
begin
COMMIT TRANSACTION
end
end
推荐阅读
- reactjs - 我是否正确使用 API 做出反应?我没有得到任何输出
- python - 我无法访问 Cog 内的类方法中的类参数
- google-cloud-platform - GCP | 如何查看项目中所有正在运行的虚拟机?
- python-3.x - 如何在python的列表中获取相同值的多个项目的单个索引?
- java - RestTemplate 从特定的 json 结构中获取列表
- json - 使用 Multipart 请求作为 Http 正文参数获得成功的 API 响应后,如何导航到下一个 Material 页面?
- azure - 如何在 MSAL 的帮助下使用 Node.js 获取 Azure DevOps PAT 列表
- python - 如何有条件地聚合 Pandas DataFrame 前几行的值?
- powerbi - 收盘价
- c# - 尝试在 C# WinForms 中使用 Gstreamer 播放 RTSP 流