次のtransact-sqlコードは正しく機能します。予想どおり、4 つの整数 (0、1、2、3) でテーブルがいっぱいになります。
CREATE TABLE [TBL_INTEGER] (
[ID] INTEGER IDENTITY ( 1, 1 ) PRIMARY KEY,
[NUMBER] INTEGER NOT NULL
)
DECLARE @MAX INTEGER
SELECT @MAX = 1000
WHILE ( 0 < @MAX ) BEGIN
INSERT [TBL_INTEGER] ( [NUMBER] ) SELECT ABS ( CHECKSUM ( NEWID () ) ) % 4
SELECT @MAX = @MAX - 1
END
次のコードはそうではありません。「列 'NUMBER' エラーに値 NULL を挿入できません」の生成に失敗します。
CREATE TABLE [TBL_INTEGER] (
[ID] INTEGER IDENTITY ( 1, 1 ) PRIMARY KEY,
[NUMBER] INTEGER NOT NULL
)
DECLARE @MAX INTEGER
SELECT @MAX = 1000
WHILE ( 0 < @MAX ) BEGIN
INSERT [TBL_INTEGER] ( [NUMBER] )
SELECT
CASE ABS ( CHECKSUM ( NEWID () ) ) % 4
WHEN 0 THEN 0
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 3
END
SELECT @MAX = @MAX - 1
END
私が追加する場合
ELSE 99
コードは失敗しません。しかし、挿入された行の 3 分の 1 には値 99 が含まれています。
説明はありますか?
前もって感謝します !
平均