Estou brincando com algumas coisas no SSMS para aprender um pouco mais enquanto estudo para o exame 70-461 e me deparei com um pouco de dificuldade. Estou tentando criar uma tabela para brincar, para não precisar alterar / excluir nenhuma das tabelas já criadas nos bancos de dados AdventureWorks ou TSQL2012. Eu criei uma tabela temporária para testar meu código antes de criar uma tabela para brincar e este é o código que estou usando para inserir valores na minha tabela:
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;
O problema que estou tendo é que continuo recebendo um erro dizendo "Não é possível inserir o valor NULL na coluna 'País', tabela 'tempdb.dbo. # TestEmployeeCountry" O motivo é que eu tenho a coluna País definida como NOT NULL e meu código funciona para algumas inserções, o problema é que eu recebo aleatoriamente valores NULL da minha declaração de caso.
Eu sei que, para corrigir isso, posso facilmente adicionar outra linha que diz "PADRÃO xxxxxx", no entanto, quero entender o que está acontecendo, porque, com base no que vejo, não devo fazer isso, devo? Eu pensei que escrevi minha declaração de caso corretamente, fornecendo um número entre 1 e 10 e, após testar apenas essa declaração específica em mais de 1000 tentativas, sempre recebo um número aleatório entre 1 e 10, nada maior ou menor. Alguém pode me ajudar a entender por que esse código tenta inserir um valor NULL nessa coluna?