私は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を列 'Country'、テーブル 'tempdb.dbo。#TestEmployeeCountryに挿入できません」というエラーが発生し続けることですこれは、Country列をNOT NULLに設定しているためです。私のコードは一部の挿入で機能しますが、問題は、case文からNULL値をランダムに取得することです。
これを修正するには、「DEFAULT xxxxxx」という別の行を簡単に追加できることを知っていますが、何が起こっているのかを理解したいのです。私はケースステートメントを正しく記述し、1〜10の数字のみを与え、1000回を超える特定の選択ステートメントのみをテストすると、常に1〜10の乱数を取得しました。このコードがその列にNULL値を入力しようとする理由を理解するのを手伝ってくれる人はいますか?