You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个事务中统计两条不同INSERT查询的总插入行数?

实现两个INSERT操作返回总受影响行数的方案

核心思路

通过数据库内置的受影响行数获取函数,将每次INSERT的返回行数累加存储到变量中,最终输出累加后的总行数即可,不需要修改原有INSERT的业务逻辑。如果是在应用层执行SQL,也可以直接调用数据库驱动提供的受影响行数获取API,将两次结果累加。

不同数据库的实现示例

MySQL

-- 开启事务
START TRANSACTION;

-- 声明总计数变量
SET @total_rows = 0;

-- 执行第一条INSERT
INSERT INTO MyTable1 
SELECT * FROM SomeTable1;
-- 累加本次受影响行数
SET @total_rows = @total_rows + ROW_COUNT();

-- 执行第二条INSERT
INSERT INTO MyTable2
SELECT * FROM SomeTable2;
-- 累加本次受影响行数
SET @total_rows = @total_rows + ROW_COUNT();

-- 提交事务
COMMIT;

-- 返回总受影响行数
SELECT @total_rows AS total_affected_rows;

SQL Server

BEGIN TRANSACTION;

DECLARE @total_rows INT = 0;

INSERT INTO MyTable1 
SELECT * FROM SomeTable1;
SET @total_rows = @total_rows + @@ROWCOUNT;

INSERT INTO MyTable2
SELECT * FROM SomeTable2;
SET @total_rows = @total_rows + @@ROWCOUNT;

COMMIT TRANSACTION;

-- 返回总受影响行数
SELECT @total_rows AS total_affected_rows;

PostgreSQL

BEGIN;

DO $$
DECLARE
    total_rows INTEGER := 0;
    cur_rows INTEGER := 0;
BEGIN
    INSERT INTO MyTable1 
    SELECT * FROM SomeTable1;
    GET DIAGNOSTICS cur_rows = ROW_COUNT;
    total_rows = total_rows + cur_rows;

    INSERT INTO MyTable2
    SELECT * FROM SomeTable2;
    GET DIAGNOSTICS cur_rows = ROW_COUNT;
    total_rows = total_rows + cur_rows;

    RAISE NOTICE '总受影响行数:%', total_rows;
END $$;

COMMIT;

内容的提问来源于stack exchange,提问作者Shahar Shokrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:15:08