Я создаю sprocs с некоторыми вычислениями, и я хочу убедиться, что я не пропущу что-то простое.Как по умолчанию NULL to Zero
Скажем, я нахожу SUM()
столбца, у которого могут быть NULL. Есть ли один оператор набора, который автоматически преобразует 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
@JeremyHolovacs - Не когда 'CONCAT_NULL_YIELDS_NULL'' 'OFF'. Это устаревший вариант, и для добавления нет эквивалента. –
@JeremyHolovacs нет, не будет. Это именно то, что «SET CONCAT_NULL_YIELDS_NULL OFF» будет делать. –
На самом деле 'SUM' уже работает точно так же, как и конкатенация с этой опцией. 'SELECT CAST (NULL AS VARCHAR) + CAST (NULL AS VARCHAR)' все еще возвращает 'NULL'. Единственный способ вернуть «NULL» - это если все входы были «NULL» –