0

我正在通过一些计算创建存储过程,并且我想确保我没有遗漏一些简单的东西。

假设我正在查找SUM()可能具有 NULL 的列。是否有一个 set 语句可以NULL自动转换为零而不必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
4

1 回答 1

2

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

  1. 首先停止允许NULLs - 添加默认值 0,如果您无法更新 DML 逻辑,则添加触发器(但最好将其作为原始插入/更新的一部分执行)。
  2. 将其COALESCE放入视图中,然后在查询中引用该视图。
  3. 将零(COALESCE当然使用)保留到单独的计算列中,并将计算更改为使用计算列而不是原始列。
于 2013-04-12T18:42:42.657 回答