Estoy jugando con algunas cosas en SSMS para aprender un poco más mientras estudio para mi examen 70-461 y me encontré con un pequeño problema. Estoy tratando de crear una tabla para jugar, así que no tengo que alterar / eliminar ninguna de las tablas ya creadas en las bases de datos AdventureWorks o TSQL2012. He creado una tabla temporal para probar mi código antes de crear una tabla para jugar y este es el código que estoy usando para insertar valores en mi tabla:
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;
El problema que tengo es que sigo recibiendo un error que dice "No se puede insertar el valor NULL en la columna 'Country', tabla 'tempdb.dbo. # TestEmployeeCountry" La razón es porque tengo la columna Country establecida en NOT NULL, y mi código funciona para algunas de las inserciones, el problema es que al azar obtengo valores NULL de mi declaración de caso.
Sé que para solucionar esto, puedo agregar fácilmente otra línea que dice "DEFAULT xxxxxx". Sin embargo, quiero entender lo que está sucediendo porque, según lo que veo, no debería tener que hacer eso, ¿verdad? Pensé que escribí mi declaración de caso correctamente, dándome un número entre 1-10 solamente y al probar solo esa declaración de selección específica en más de 1000 intentos, siempre obtengo un número aleatorio entre 1-10, nada más grande o más pequeño. ¿Alguien puede ayudarme a entender por qué este código intenta ingresar un valor NULO en esa columna?