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

如何从Registration、Advance等3个表取最大Reciptno生成自动收据编号?

解决方案:从多个表获取最大收据编号

要从Registration、Advance和第三个目标表中拿到全局最大的Reciptno,你只需要调整SQL查询的逻辑:先分别查询每个表的最大收据号(用COALESCE处理空表的情况,避免返回NULL),再通过UNION ALL合并这些结果,最后取合并结果里的最大值就行。

修改后的完整代码

var conrecipt = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
conrecipt.Open();

// 记得把下面的ThirdTable替换成你实际的第三个表名
var cmd = new SqlCommand(@"
    SELECT COALESCE(MAX(MaxReciptno), 0) 
    FROM (
        SELECT COALESCE(MAX(Reciptno), 0) AS MaxReciptno FROM Registration
        UNION ALL
        SELECT COALESCE(MAX(Reciptno), 0) AS MaxReciptno FROM Advance
        UNION ALL
        SELECT COALESCE(MAX(Reciptno), 0) AS MaxReciptno FROM ThirdTable
    ) AS CombinedMax", conrecipt);

int i = Convert.ToInt32(cmd.ExecuteScalar());
conrecipt.Close();
i++;
Label3.Text = "Reciptno" + i.ToString(); // 这里注意你原代码里的Reciptno如果是字符串常量,记得加引号;如果是变量就保留原写法

关键细节说明

  1. 子查询与UNION ALL:子查询会分别从三个表提取各自的最大收据号(如果某个表是空的,COALESCE会返回0),UNION ALL把这三个值合并成一个临时结果集。
  2. 外层MAX函数:外层查询从临时结果集中取最大值,这样就得到了三个表中的全局最大收据号。
  3. 并发场景提醒:如果你的系统是多用户同时使用的环境,这种“查最大值+1”的方式可能会出现重复编号的问题(两个用户同时查到相同的最大值,然后生成一样的新编号)。这种情况下,更可靠的方案是用数据库的标识列(Identity Column)、序列(Sequence),或者在查询时加行级锁来避免冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:54:38