CASE
adalah ekspresi (bukan pernyataan) dan tidak dapat digunakan untuk kontrol aliran seperti itu - untuk tidak memanggil perintah, tidak mengembalikan lebih dari satu kolom / nilai, tidak dapat digunakan sebagai perintah sendiri.
Menurut saya, Anda bisa menggunakan IF
untuk meningkatkan kesalahan ketika tanggal sama, jika tidak, jalankan sisipan.
IF @dateA = @dateB
BEGIN
raiseerror('dates equal',20,-1) with log;
END
ELSE -- maybe you don't need a batch-aborting, logging error level
BEGIN
INSERT ...
END
Anda juga bisa melakukannya dengan cara lain. Jalankan sisipan hanya jika tanggal tidak sama , jika tidak, galat:
IF @dateA <> @dateB
BEGIN
INSERT ...
END
ELSE
BEGIN
raiserror ...
END
Jika Anda berpikir untuk menggunakan kesalahan hanya untuk tujuan keluar dari menjalankan sisipan, maka Anda hanya dapat menghapus segala sesuatu dari ELSE
bawah, karena satu-satunya cara menyisipkan akan berjalan adalah ketika @dateA
dan @dateB
yang tidak sama :
IF @dateA <> @dateB
BEGIN
INSERT ...
END
Saya telah mengurangi cara untuk menjadi jago tentang hal-hal seperti baris (vs "catatan"), dan kolom (vs "bidang"), tetapi keseluruhan ekspresi vs pernyataan adalah perbedaan yang sangat penting, untuk alasan inilah. Lihat " Rahasia Kotor Ekspresi KASUS ."
CASE
- SQL Server hanya memilikiCASE
ekspresi.