Получение NULL из всей таблицы - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть таблица SQL Server, которую я создаю с более чем 100 столбцами.Я выполняю UPDATE TABLE_NAME запросов, чтобы заполнить эту таблицу.Однако, если нет доступных записей, в запись вставляется NULL.Это усложняет вычисления, которые я должен выполнить.

Я попытался создать таблицу с NOT NULL и DEFAULT (0) в операторе CREATE TABLE, но когда я запускаю обновление, он пытается вставить значение NULL, и я получаю эту ошибку:

Оператор обновления:

UPDATE TABLE_NAME
SET NumOrders = (SELECT count(OrderID) FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID);

Cannot insert the value NULL into column 'NumOrders', table 'TABLE_NAME'; column does not allow nulls. UPDATE fails.

Я мог бы выполнить второй запрос на обновление, чтобы удалить NULLS, например:

UPDATE TABLE_NAME
SET NumOrders = 0
WHERE NumOrders IS NULL;

Это похоже наЯ удваиваю запросы на обновление, которые мне нужно написать.

Должен быть лучший способ сделать это, верно ....?

Спасибо

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011
UPDATE TABLE_NAME
SET NumOrders = isnull((SELECT count(OrderID) FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID),0);

это работает для вас?

1 голос
/ 22 декабря 2011

ограничения по умолчанию действуют только для вставок, а не для обновлений. Другой вариант для вас - иметь триггер обновления, который изменит NULLS на что-то, что не равно нулю

или укажите значения в операторе обновления и убедитесь, что оно не равно нулю, а фактическое значение

0 голосов
/ 22 декабря 2011

ОБНОВЛЕНИЕ TABLE_NAME SET NumOrders = COALESCE ((ВЫБЕРИТЕ количество (OrderID) ИЗ ЗАКАЗОВ, ГДЕ TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID), 0);

...