Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将NULL默认为零_Sql_Sql Server 2008_Tsql_Stored Procedures - Fatal编程技术网

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)是更好的选择。