目前,我正致力于为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语句进行比较的值。
非常感谢任何帮助。
答案 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