我正在通过一些计算来创建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
答案 0 :(得分:2)
不,没有神奇的方法可以做到这一点。但是有多种解决方法:
NULL
- 添加默认值0,如果你不能更新DML逻辑,那么添加一个触发器(但最好这样做是原始插入/更新的一部分) )。COALESCE
放入视图中,然后在查询中引用该视图。COALESCE
)保留到单独的计算列中,并更改计算以使用计算列而不是原始列。