Я играю с некоторыми вещами в SSMS, чтобы узнать немного больше, когда я готовлюсь к экзамену 70-461, и я наткнулся на небольшое зависание. Я пытаюсь создать таблицу, с которой можно поиграться, поэтому мне не нужно изменять / удалять любые из уже созданных таблиц в базах данных AdventureWorks или TSQL2012. Я создал временную таблицу для проверки своего кода перед тем, как создать таблицу для игры, и это код, который я использую для вставки значений в мою таблицу:
DECLARE @i INT = 1
WHILE @i < 10
BEGIN
INSERT INTO #TestEmployeeCountry
VALUES ( SUBSTRING('ABCDEFGHIJKLMNOP', @i, 1),
CASE (SELECT ABS(CHECKSUM(NEWID()))%10 +1)
WHEN 1 THEN 'USA'
WHEN 2 THEN 'CANADA'
WHEN 3 THEN 'MEXICO'
WHEN 4 THEN 'UK'
WHEN 5 THEN 'FRANCE'
WHEN 6 THEN 'SPAIN'
WHEN 7 THEN 'RUSSIA'
WHEN 8 THEN 'CHINA'
WHEN 9 THEN 'JAPAN'
WHEN 10 THEN 'INDIA'
END)
SET @i = @i + 1
END;
Проблема, с которой я сталкиваюсь, заключается в том, что я получаю сообщение об ошибке: «Невозможно вставить значение NULL в столбец« Страна », таблица« tempdb.dbo. # TestEmployeeCountry ». Причина этого в том, что для столбца Страна установлено значение NOT NULL» мой код работает для некоторых вставок, проблема в том, что я случайно получаю значения NULL из моего оператора case.
Я знаю, что для исправления этого я могу легко добавить еще одну строку с надписью «ПО УМОЛЧАНИЮ xxxxxx», однако я хочу понять, что происходит, потому что исходя из того, что я вижу, мне не нужно этого делать, не так ли? Мне показалось, что я правильно написал свое утверждение с указанием числа от 1 до 10, и после тестирования только этого конкретного оператора выбора за 1000 попыток я всегда получаю случайное число от 1 до 10, ничего больше или меньше. Может кто-нибудь помочь мне понять, почему этот код пытается ввести значение NULL в этот столбец?