查找SQL数据库中的最大数字,如果不可用则返回' 0'

时间:2016-08-02 07:19:05

标签: c# asp.net sql-server

目前,我正致力于为ASP.NET C#Web应用程序生成一种方法,以检索SQL数据库中列中的最大数字。现在,我设法生成以下代码行。

commTagNo = new SqlCommand("SELECT MAX(ComponentTagEntry) FROM dbo.HullDataSheet", connHull);

connHull.Open();
int newTagNo = (int)commTagNo.ExecuteScalar();
connHull.Close();

newTagNo = newTagNo + 1;

其中connHull是上述代码行的SqlConnection

当且仅当数据库已经拥有最少一行数据时,上述代码才能检索列ComponentTagEntry中的最大数字。

如果数据库为空,则会返回'指定演员表无效'因为没有数据要做.ExecuteScalar()

我需要的是,当数据库为空时,代码检索最高数字为' 0'。

我知道我必须使用if then语句修改上述代码,但我不知道必须与true / false语句进行比较的值。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

coalesce是要走的路:

select coalesce(max(ComponentTagEntry)) from ...

例如:

create table dbo.HullDataSheet (ComponentTagEntry int);

select coalesce(max(ComponentTagEntry), 0) from HullDataSheet

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

-----------
0

(1 row(s) affected)

Table 'HullDataSheet'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 0 ms.

答案 1 :(得分:1)

ISNULL运营商应该提供帮助。

commTagNo = new SqlCommand("SELECT ISNULL(MAX(ComponentTagEntry), 0) FROM dbo.HullDataSheet", connHull);

答案 2 :(得分:1)

我建议

int newTagNo = 0;
object testMe = commTagNo.ExecuteScalar();
if (testMe != null) { newTagNo = (int)testMe; }

答案 3 :(得分:0)

尝试此查询。兼容SQL Server和& MySQL的:

select 
    case 
       when MAX(ComponentTagEntry) IS NULL 
          then 0 
          else MAX(ComponentTagEntry) 
    end 
from 
    dbo.HullDataSheet