Saya bermain-main dengan beberapa hal dalam SSMS untuk belajar sedikit lebih banyak ketika saya belajar untuk ujian 70-461 saya dan saya menemukan sedikit gangguan. Saya mencoba membuat tabel untuk bermain-main sehingga saya tidak perlu mengubah / menghapus tabel yang sudah dibuat di database AdventureWorks atau TSQL2012. Saya telah membuat tabel temp untuk menguji kode saya sebelum saya benar-benar membuat tabel untuk bermain dan ini adalah kode yang saya gunakan untuk memasukkan nilai ke dalam tabel saya:
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;
Masalah yang saya alami adalah saya terus mendapatkan pesan kesalahan yang mengatakan "Tidak dapat memasukkan nilai NULL ke kolom 'Negara', tabel 'tempdb.dbo. # TestEmployeeCountry" Alasannya adalah karena saya mengatur kolom Negara disetel ke TIDAK NULL, dan kode saya tidak berfungsi untuk beberapa sisipan, masalahnya adalah saya secara acak mendapatkan nilai NULL dari pernyataan kasus saya.
Saya tahu bahwa untuk memperbaiki ini saya dapat dengan mudah menambahkan baris lain yang mengatakan "DEFAULT xxxxxx" namun saya ingin mengerti apa yang sedang terjadi karena berdasarkan apa yang saya lihat saya tidak harus melakukan itu, bukan? Saya pikir saya menulis pernyataan kasus saya dengan benar, memberi saya angka antara 1-10 saja dan setelah menguji hanya pernyataan pilih spesifik lebih dari 1000 percobaan, saya selalu mendapatkan angka acak antara 1-10, tidak ada yang lebih besar atau lebih kecil. Adakah yang bisa membantu saya memahami mengapa kode ini mencoba memasukkan nilai NULL ke dalam kolom itu?