Je joue avec des trucs dans SSMS pour en savoir un peu plus en étudiant pour mon examen 70-461 et je suis tombé sur un petit blocage. J'essaie de créer une table pour jouer avec, donc je n'ai pas à modifier / supprimer l'une des tables déjà créées dans les bases de données AdventureWorks ou TSQL2012. J'ai créé une table temporaire pour tester mon code avant de créer une table pour jouer avec et c'est le code que j'utilise pour insérer des valeurs dans ma table:
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;
Le problème que je rencontre est que je reçois toujours une erreur disant "Impossible d'insérer la valeur NULL dans la colonne 'Country', la table 'tempdb.dbo. # TestEmployeeCountry" La raison en est que j'ai la colonne Country définie sur NOT NULL, et mon code fonctionne pour certaines des insertions, le problème est que j'obtiens au hasard des valeurs NULL de ma déclaration de cas.
Je sais que pour résoudre ce problème, je peux facilement ajouter une autre ligne qui dit "DEFAUT xxxxxx" mais je veux comprendre ce qui se passe parce que d'après ce que je vois, je ne devrais pas avoir à le faire, non? Je pensais avoir écrit ma déclaration de cas correctement, en me donnant un nombre compris entre 1 et 10 uniquement et en testant uniquement cette déclaration spécifique spécifique sur 1000 essais, j'obtiens toujours un nombre aléatoire entre 1 et 10, rien de plus grand ou de plus petit. Quelqu'un peut-il m'aider à comprendre pourquoi ce code essaie d'entrer une valeur NULL dans cette colonne?