Невозможно вставить значение NULL в столбец SQL Server - PullRequest
0 голосов
/ 14 мая 2019

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

Для иллюстрации это что-то вроде:

ALTER PROCEDURE theSp
AS BEGIN
     INSERT INTO dbo.theTable (attr1, att2, amount, attr4)
         SELECT attr1, attr2, amount, attr4
         FROM theView
END  

Представление определяется следующим образом:

select attr1, attr2, amount, attr4
from db1.theTable
where date >='anyDate'

и значения вставлены правильно, но если представление используется следующим образом:

select attr1, attr2, amount, attr4
from db2.theTable
where date >='anyDate'

это сообщение отображается:

Проверка информации об идентичности: текущее значение идентификатора '1252'.
Выполнение DBCC завершено.Если DBCC напечатал сообщения об ошибках, обратитесь к системному администратору.

Сообщение 515, Уровень 16, Состояние 2, Процедура theSp, Строка 16
Невозможно вставить значение NULL в столбец «количество», таблица «db2.dbo»..стол';столбец не допускает пустых значений.INSERT завершается неудачей.

Примечание: атрибут 'amount' для таблиц db1 и db2 допускает нулевое значение, но я никогда не вставляю нулевое значение, вместо этого я вставляю 0.

Поэтому я отфильтровал, чтобы проверить,атрибут количества равен нулю, и я не получил результатов, то есть в атрибуте суммы нет нулевого значения.

Кто-нибудь знает возможное решение?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Хорошо иметь регистратор для проверки состояния, когда оно идет не так, как печать значений перед вставкой

0 голосов
/ 14 мая 2019

Посмотрев сообщение об ошибке, которое вы опубликовали

Невозможно вставить значение NULL в столбец «сумма», таблица «db2.dbo.theTable»;столбец не допускает пустых значений.Вставить не удается.Оператор был прерван.

в столбце amount в `db2.dbo.theTable 'есть значение Null.Вы можете использовать ISNULL () , чтобы избавиться от этой проблемы.

Если вы хотите увидеть значения NULL, вам нужно использовать запрос вроде

select * from db2.dbo.theTable where amount IS NULL

Посмотрите на is Null vs = Null , чтобы понять, почему вы не видели эти нулевые записи в предыдущем запросе.

...