今日、同僚のスクリプトを実行しているときに、上記の「ANSI警告」メッセージが表示されました(そして、多くのステートメントのどれが警告を表示したのかわかりません)。
過去に私はそれを無視していました。私はヌルを自分で避けているので、それらを排除するものは私の本では良いことです!しかし、今日、「SET」という言葉が文字通り私に叫び、私はこの文脈でその言葉の意味が何を意味するのかわからないことに気付きました。
私が最初に考えたのは、大文字であるという事実に基づいて、SET
キーワードを参照しており、「割り当て」を意味しているということです。
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
SQL Serverヘルプによると、「ANSI警告」機能はISO / ANSI SQL-92に基づいています。この仕様では、サブセクションのタイトル、つまりタイトルの場合、データ割り当てセクション。ただし、エラーメッセージをすばやくグーグルで調べた後、SELECT
割り当てが関係していないように見えるクエリの例を見ることができます。
SQL Serverの警告の文言に基づいた私の2番目の考えは、集合の数学的意味が暗示されているということでした。ただし、SQLの集約が厳密に言うと集合演算であるとは思いません。SQL Serverチームがそれを集合演算であると見なしている場合でも、「集合」という単語を大文字にする目的は何ですか?
グーグル検索中に、SQL Serverのエラーメッセージに気付きました。
Table 'T' does not have the identity property. Cannot perform SET operation.
ここでの同じケースでの「SET操作」という同じ言葉は、IDENTITY_INSERT
プロパティの割り当てを指しているだけで、最初の考えに戻ります。
誰かが問題に光を当てることはできますか?
SET
キーワードのような完全な大文字で常にある
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'
SET
キーワードを示すと思われる他の3つの結果が得られます。
set operations
はUNION
、INTERSECT
およびを参照する多くの参照が見つかりましたが、これらの状況でEXCEPT
はエラーを思い付くことができませんNULL
。レガシーエラーメッセージかもしれません。