【问题标题】:Select Max Number From Multiple Tables从多个表中选择最大数量
【发布时间】:2018-03-20 07:13:03
【问题描述】:

我正在研究自动生成代码收据编号。这是我的代码:

var conrecipt = new SqlConnection(
    ConfigurationManager.ConnectionStrings["con"].ConnectionString);
conrecipt.Open();
var cmd = new SqlCommand("Select COALESCE(MAX(Reciptno),0) from Registration", conrecipt);
int i = Convert.ToInt32(cmd.ExecuteScalar());
conrecipt.Close();
i++;
Label3.Text = Reciptno + i.ToString();

一切正常。但我需要检查 3 个表:Registration、Advance 和另外一个表,并且需要从这些 id 中找到最大值。

如何在 Asp.Net C# 和 MS SQL Server 2012 中执行此操作?

【问题讨论】:

标签: c# sql asp.net sql-server


【解决方案1】:
SELECT MAX(M)
FROM
(
    SELECT MAX(Value) as M Table1
    UNION ALL
    SELECT MAX(Value) as M Table2
    UNION ALL
    SELECT MAX(Value) as M Table3
) as x

而且一般情况下对所有三个表都使用一个序列更正确,新值的定义不会有问题

【讨论】:

    【解决方案2】:

    你可以使用 union 来获取所有的 reciptno 并选择最大值

     select COALESCE(MAX(Reciptno),0) 
       from (
        Select Reciptno 
        from Registration
        UNION 
        Select Reciptno 
        from Advance
        UNION 
        Select Reciptno  
        from one_more_table
        ) as t
    

    如果你有 nvarchar 你可以使用转换

    select COALESCE(MAX( convert (int, t.Reciptno)),0) 
       from (
        Select Reciptno 
        from Registration
        UNION 
        Select Reciptno 
        from Advance
        UNION 
        Select Reciptno  
        from one_more_table
        ) as t
    

    【讨论】:

    • 您好,先生,谢谢您的回复,我试试这个,但在表 1 收据中最高的是 02,在表 2 中收据编号是 010,在表 3 中收据编号是 037,所以它必须显示 037 但是其显示09来自表2
    • @Vikas .. 但是.. ?
    • 对不起我的英语先生
    • 不应该是UNION ALL 而不是UNION
    • @Vikas:你在这个序列中使用 VarChars 吗?哎哟。顺便说一句,您是否注意到您的方法也因单个表而失败:-)
    【解决方案3】:

    使用存储过程来实现 ID 逻辑。在存储过程中,您可以从所有相关表中找到 ID 并计算最大 ID。然后,您将从应用程序调用存储过程。

    要获得更好的解决方案,请阅读实体关系设计。收据是一个实体,它应该在一个地方定义收据,包括其 ID(主键)。如果在其他表中使用了收据 ID,则这称为外键,应在数据库中强制执行,以确保表中引用的每个 ID 都已存在于“主”收据表中。

    【讨论】:

    • 您好先生,Under先生,非常感谢您给我的想法,这对我保住我的工作非常有帮助,非常感谢
    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 2012-05-09
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多