Saya melihat pesan 'peringatan ANSI' di atas hari ini ketika menjalankan skrip kolega (dan saya tidak tahu yang mana dari banyak pernyataan yang menyebabkan peringatan ditampilkan).
Di masa lalu saya telah mengabaikannya: Saya menghindari nol dan jadi apa pun yang akan menghilangkannya adalah hal yang baik dalam buku saya! Namun, hari ini kata 'SET' secara harfiah meneriaki saya dan saya menyadari saya tidak tahu apa arti kata itu dalam konteks ini.
Pikiran pertama saya, berdasarkan fakta ini adalah huruf besar, adalah merujuk pada SET
kata kunci dan berarti 'penugasan', seperti dalam
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
Menurut Bantuan SQL Server, fitur 'peringatan ANSI' didasarkan pada ISO / ANSI SQL-92, spesifikasi yang hanya menggunakan satu kali penggunaan istilah 'Atur operasi' dalam judul subbagian, maka dalam kasus judul, dalam bagian penugasan data. Namun, setelah Googling cepat dari pesan kesalahan saya melihat contoh yang SELECT
kueri dengan tampaknya tidak ada tugas yang terlibat.
Pikiran kedua saya, berdasarkan kata-kata peringatan SQL Server, adalah bahwa makna matematika dari himpunan tersirat. Namun, saya tidak berpikir bahwa agregasi dalam SQL benar-benar berbicara tentang operasi yang ditetapkan. Bahkan jika tim SQL Server menganggapnya sebagai operasi himpunan, apa tujuan dari menempatkan kata 'himpunan' di ibukota?
Sementara Googling saya melihat pesan kesalahan SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
Kata-kata yang sama 'SET operasi' dalam kasus yang sama di sini hanya dapat merujuk pada penugasan IDENTITY_INSERT
properti, yang membawa saya kembali ke pikiran pertama saya.
Adakah yang bisa menjelaskan masalah ini?
SET
selalu dalam topi penuh seperti kata kunci
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'
memberikan 3 hasil lain yang semuanya sepertinya mengindikasikan SET
kata kunci juga.
set operations
merujuk ke UNION
dan INTERSECT
dan EXCEPT
, tetapi saya tidak bisa mendapatkan kesalahan untuk muncul NULL
dalam situasi seperti itu. Saya pikir ini mungkin pesan kesalahan lama.