Sql 如何将NULL默认为零
我正在通过一些计算创建存储过程,我想确保我没有遗漏一些简单的东西 假设我正在查找可能有空值的列的Sql 如何将NULL默认为零,sql,sql-server-2008,tsql,stored-procedures,Sql,Sql Server 2008,Tsql,Stored Procedures,我正在通过一些计算创建存储过程,我想确保我没有遗漏一些简单的东西 假设我正在查找可能有空值的列的SUM()。是否有一个set语句可以将NULL自动转换为零,而无需每次合并?还是每次都必须手动检查NULL 我已经看过了,但没有看到任何有用的东西 有一种方法可以使NULL与串联一起工作,但我看不到任何计算方法 例如: SET ANSI_NULLS ON SET CONCAT_NULL_YIELDS_NULL ON --Calc SELECT SUM(CONVERT(decimal(10,2), N
SUM()
。是否有一个set语句可以将NULL
自动转换为零,而无需每次合并
?还是每次都必须手动检查NULL
我已经看过了,但没有看到任何有用的东西
有一种方法可以使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
不,没有什么神奇的方法可以做到这一点。但是,有多种解决办法:
NULL
s-添加默认值0,如果无法更新DML逻辑,则添加触发器(但最好在原始插入/更新中这样做)合并
放入一个视图中,然后在查询中引用该视图合并)保留到单独的计算列中,并将计算更改为使用计算列而不是原始列
@JeremyHolovacs-当
CONCAT\u NULL\u产生\u NULL
为OFF
时不可用。这是一个不推荐使用的选项,没有用于添加的等效选项。@JeremyHolovas不,不会。这正是SET CONCAT\u NULL\u产生的结果
可以。实际上,SUM
的工作原理与启用该选项时的串联完全相同选择CAST(NULL作为VARCHAR)+CAST(NULL作为VARCHAR)
仍然返回NULL
。返回NULL
的唯一方法是如果所有输入都是NULL
@Jeremy是的,我知道。我是说,当你把这个选项设置为OFF时,它就不会了。@AaronBertrand好的,是的,速度阅读在这里咬了我一口。:)所以我应该远离设置CONCAT\u NULL\u NULL OFF
?@JIsaak-是的。请参阅并选择总和(转换(十进制(10,2),合并(NULL,0))
是完全可以接受的吗?我不明白合并(NULL,0)
-您的意思是合并(列名称,0)
?@JIsaak SUM已经在消除空值了。只有当所有值都为NULL时,它才会返回NULL。您不需要在每一行上使用COALESCE,而只需要在结果集上使用COALESCE。合并(总和(列名称),0)是更好的选择。