Podczas uruchamiania skryptu współpracownika widziałem powyższy komunikat „Ostrzeżenie ANSI” (i nie wiem, które z wielu stwierdzeń spowodowało wyświetlenie ostrzeżenia).
W przeszłości ignorowałem to: sam unikam zer, więc wszystko, co je wyeliminowałoby, jest dobrą rzeczą w mojej książce! Jednak dzisiaj słowo „SET” dosłownie krzyknęło na mnie i zdałem sobie sprawę, że nie wiem, jakie znaczenie powinno mieć w tym kontekście.
Moją pierwszą myślą, opartą na tym, że jest wielka, jest to, że odnosi się do SET
słowa kluczowego i oznacza „przypisanie”, jak w
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
Zgodnie z Pomocą programu SQL Server funkcja „ostrzeżeń ANSI” jest oparta na normie ISO / ANSI SQL-92, dla której specyfikacja używa tylko jednego terminu „Ustaw operację” w tytule podsekcji, stąd w przypadku tytułu w sekcja przypisywania danych. Jednak po szybkim przejrzeniu komunikatu o błędzie widzę przykłady, które są SELECT
zapytaniami, które najwyraźniej nie wiążą się z przypisaniem.
Moja druga myśl, oparta na sformułowaniu ostrzeżenia SQL Server, była taka, że implikowane jest matematyczne znaczenie zestawu. Jednak nie sądzę, że agregacja w SQL jest ściśle operacją ustawioną. Nawet jeśli zespół SQL Server uważa, że jest to operacja ustawiania, jaki jest cel umieszczania słowa „set” wielkimi literami?
Podczas przeglądania Google zauważyłem komunikat o błędzie programu SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
Te same słowa „operacja SET” w tym samym przypadku mogą odnosić się tylko do przypisania IDENTITY_INSERT
właściwości, co sprowadza mnie z powrotem do mojej pierwszej myśli.
Czy ktoś może rzucić jakieś światło na tę sprawę?
SET
jest zawsze pisane dużymi literami jak słowo kluczowe
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'
daje 3 inne wyniki, które wydają się wskazywać również na SET
słowo kluczowe.
set operations
odnosząc się do UNION
i INTERSECT
a EXCEPT
, ale nie mogę dostać błąd wymyślić NULL
w żadnej z tych okoliczności. Myślę, że może to być starszy komunikat o błędzie.