你好我正在尝试选择所有付款的SUM,但是得到了这个例外:nvl不是公认的函数名称
使用此代码:
SqlCommand sc2 = new SqlCommand("SELECT SUM(NVL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni);
spojeni.Open();
int sumOfPrice = 0;
object vysledek2 = sc2.ExecuteScalar();
if (vysledek2 != DBNull.Value)
sumOfPrice = Convert.ToInt32(vysledek2);
// int vysledek2 = Convert.ToInt32(sc2.ExecuteScalar());
spojeni.Close();
这应该工作,因为没有找到列“付款”的记录,如果可能,我想得到“0”。
感谢您阅读本文。
答案 0 :(得分:1)
NVL()
是特定于oracle的函数。您可以使用ANSI COALSECE
函数执行相同的任务。 COALESCE
的好处是它需要两个以上的参数,并选择第一个非空值。
答案 1 :(得分:0)
在SQL Server中,有一个名为ISNULL的函数用于此目的。请在下面找到查询:
SELECT SUM(ISNULL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni
答案 2 :(得分:0)
当没有找到“付款”列
的记录时,这应该有效
不,它只会将payments
列中的NULL值视为0。
如果未找到任何记录,则ExecuteScalar
会返回null
(而不是DBNull
):
SqlCommand sc2 = new SqlCommand("SELECT SUM(ISNULL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni);
spojeni.Open();
int sumOfPrice = 0;
object vysledek2 = sc2.ExecuteScalar();
if (vysledek2 != null && vysledek2 != DBNull.Value)
sumOfPrice = Convert.ToInt32(vysledek2);
spojeni.Close();
您还应该考虑使用SqlParameter
而不是连接字符串,但这是一个单独的问题。