在学习70-461考试时,我正在玩SSMS中的一些东西,以学到更多知识,并且遇到了一些麻烦。我正在尝试创建一个表以供使用,因此我不必更改/删除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的'Country'列中”这是因为我将Country列设置为NOT NULL,并且我的代码确实适用于某些插入,问题是我从case语句中随机获取了NULL值。
我知道要解决此问题,我可以轻松添加另一行“ DEFAULT xxxxxx”,但是我想了解发生了什么,因为基于我所看到的,我不必这样做,对吗?我以为我正确地写了case语句,只给我一个1-10之间的数字,而仅测试了1000次尝试中的特定select语句,我总是得到一个介于1-10之间的随机数,没有更大或更小的值。谁能帮助我了解为什么此代码尝试在该列中输入NULL值?