如何将NULL默认为零

时间:2013-04-12 18:35:31

标签: sql sql-server-2008 tsql stored-procedures

我正在通过一些计算来创建sprocs,我想确保我不会遗漏一些简单的东西。

说我找到了一个可能有NULL的列的SUM()。是否有单个set语句可以自动将NULL转换为Zero,而不必每次都COALESCE?或者我每次都必须手动检查NULL吗?

我查看了MSDN SET,但我没有看到任何有用的内容。

有一种方法可以让NULL使用连接,但我没有看到任何计算内容。

例如:

SET ANSI_NULLS ON
SET CONCAT_NULL_YIELDS_NULL ON

--Calc
SELECT SUM(CONVERT(decimal(10,2), NULL))
SELECT SUM(CONVERT(decimal(10,2), Coalesce(NULL,0)))

--Concat
SELECT  NULL + ', ' + 'Isaak' AS Name
SELECT COALESCE(NULL + ', ' + 'Isaak','') AS Name
SELECT COALESCE(NULL,'') + ', ' + 'Isaak' AS Name

--Change Concat NULL to OFF
SET ANSI_NULLS ON
SET CONCAT_NULL_YIELDS_NULL OFF

--Calc
SELECT SUM(CONVERT(decimal(10,2), NULL))
SELECT SUM(CONVERT(decimal(10,2), Coalesce(NULL,0)))

--Concat
SELECT  NULL + ', ' + 'Isaak' AS Name
SELECT COALESCE(NULL + ', ' + 'Isaak','') AS Name
SELECT COALESCE(NULL,'') + ', ' + 'Isaak' AS Name

1 个答案:

答案 0 :(得分:2)

不,没有神奇的方法可以做到这一点。但是有多种解决方法:

  1. 首先停止允许NULL - 添加默认值0,如果你不能更新DML逻辑,那么添加一个触发器(但最好这样做是原始插入/更新的一部分) )。
  2. COALESCE放入视图中,然后在查询中引用该视图。
  3. 将零(当然使用COALESCE)保留到单独的计算列中,并更改计算以使用计算列而不是原始列。