2015-10-07 2 views
3
INSERT INTO DDA_MatchStrings 
(Unit, FamilyID, AccountNumber, MatchType, MatchString, SnapshotDate, IgnoreRecord, Merged) 
SELECT 
Unit, FamilyID, AccountNumber, 'EMAIL', MatchString, @SnapshotDate, 0,    0 
FROM DDA_MatchStrings_temp AS tms 
WHERE tms.MatchString IN 
    (SELECT tms.MatchString FROM DDA_MatchStrings_temp AS tms 
    GROUP BY tms.MatchString 
    HAVING COUNT(DISTINCT unit) > 1) 
ORDER BY tms.MatchString 

Я добавил отступы в полевые ссылки для визуального наблюдения.Почему я получаю «Не могу вставить значение NULL в ошибки столбца« X », на жестко закодированное значение?

Это утверждение в хранимой процедуре, но когда SP попадает в этот момент, он дает следующее сообщение об ошибке:

Cannot insert the value NULL into column 'IgnoreRecord', table 'Db.dbo.TableX'; column does not allow nulls. INSERT fails.

Я знаю, что значит эта ошибка. Я не новичок в T-SQL. Тем не менее, я полностью озадачен тем, почему он дает мне эту ошибку? Значение не равно нулю. Это жесткий код 0. FYI, поле, о котором идет речь, является tinyint. Он должен принять это значение. Кроме того, это утверждение также в других хранимых процедур (только с другим значением в поле MatchType.

Что может вызвать эту ошибку?

UPDATE

Я решил ответить на мой собственный вопрос, а не удалять его. Это хороший случай, когда не обращать внимания на схемы db, вызвало проблемы. Стоит обновить в качестве ссылки, что вы всегда должны уделять внимание определениям объектов SQL и какие схемы предоставляются при выполнении кода. ненавижу быть тем, кто ошибается, но, надеюсь, другие узнают из моей ошибки.

+1

Мое предположение заключается в том, что оператор select возвращает нулевые записи (т. Е. Все значения null), и этот столбец является единственным, что волнует. Даже если у вас есть жестко закодированное значение '0', строки (-ы) будут либо существовать, либо не существовать на основе вашего предложения where. –

+1

В таблице также может быть триггер, который изменит значение 0 на нуль? – SomeJavaGuy

+0

FYI, создайте эту таблицу. Триггеров нет. Поданная информация определяется как «[IgnoreRecord] [tinyint] NOT NULL'. – RLH

ответ

5

Хорошо ... Я чувствую себя немного глупо, но я мог бы ответить на это потомству.

Проблема заключается не в инструкции insert, а в моем скрипте ... она относится к схемам. Определение СП:

CREATE PROCEDURE dbo.DDA_Generate_PotentialDuplicate_Emails 

Видимо, в какой-то момент я определил это как:

CREATE PROCEDURE DDA_Generate_PotentialDuplicate_Emails 

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

Итак ... когда я изменил код исполнения от:

EXEC DDA_Generate_PotentialDuplicate_Emails 

в

EXEC dbo.DDA_Generate_PotentialDuplicate_Emails 

Все начали работать должным образом, потому что я управлял правильной версией хранимой процедуры. : P

Смежные вопросы