Ошибка обновления таблицы базы данных при значении NULL - PullRequest
0 голосов
/ 17 октября 2010

У меня есть две таблицы. Одна таблица на самом деле заполняется ежедневными событиями, а другая - просто сводка другой таблицы. У меня есть хранимая процедура, которая удаляет значения, хранящиеся в ежедневной таблице. Теперь после каждого удаления итоговая таблица также должна обновляться таким образом, что теперь сумма будет обновляться за вычетом значения удаленной.

Моя проблема в том, что, когда ежедневная таблица была очищена, то после ее автоматического суммирования получается значение NULL (поскольку в ней не найдено записей). Затем происходит сбой приложения, поскольку моя сводная таблица не должна содержать значения NULL.

Если это возможно, как я могу создать процедуру, которая будет иметь значение 0, если SUM приведет к NULL?

ОБРАЗЕЦ ЗАПРОСА:

DELETE FROM Daily WHERE DailyID = @DailyID

SELECT @TotalA = SUM(o.OutA), @TotalB = SUM(o.OutB), @TotalC = SUM(o.OutB)
FROM Daily 
WHERE Day = @Day

UPDATE Summary 
SET MyA = @TotalA, MyB = @TotalB, MyC = @TotalC
WHERE SummaryID = @SummaryID

Исходя из моего запроса, приведенного выше, допустим, у меня есть 10 записей в моей ежедневной таблице. 2 записи в среду, 3 в пятницу и 5 в субботу. Таким образом, в моей сводной таблице будет три записи - сводка по каждой среде, субботе и пятнице.

Когда я прошу мою процедуру удалить все записи в среду, тогда останется 8 записей (без среды). И поэтому я должен обновить мою сводную запись, говоря, что все записи среды были удалены. Однако я не хочу, чтобы моя Сводная таблица забыла, что у него была среда. Поэтому вместо этого я хочу, чтобы он сохранил запись среды со значениями суммарных значений, равными нулю (0).

Ответы [ 2 ]

1 голос
/ 17 октября 2010

Это на сервере SQL попробуйте ISNULL (SUM (столбец), 0).

1 голос
/ 17 октября 2010

Вы можете использовать COALESCE для замены NULL на значение:

SELECT COALESCE( your_column, 0 )
FROM your_table

Он принимает список аргументов и возвращает первый аргумент, NOT NULL.


РЕДАКТИРОВАТЬ : На вашем примере вы можете сделать что-то подобное:

UPDATE Summary
SET MyA = Coalesce( @TotalA, 0 ),
    MyB = Coalesce( @TotalB, 0 ),
    MyC = Coalesce( @TotalC, 0 )
WHERE SummaryID = @SummaryID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...