Я видел вышеупомянутое сообщение «Предупреждение ANSI» сегодня, когда запускал скрипт коллеги (и я не знаю, какое из многих утверждений вызвало вывод предупреждения).
В прошлом я игнорировал это: я сам избегаю нулей, и поэтому все, что могло бы их устранить, - хорошая вещь в моей книге! Однако сегодня слово «SET» буквально выкрикнуло на меня, и я понял, что не знаю, каково значение этого слова в этом контексте.
Моя первая мысль, основанная на том факте, что это верхний регистр, заключается в том, что он ссылается на SET
ключевое слово и означает «назначение», как в
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
Согласно справке SQL Server, функция «Предупреждения ANSI» основана на стандарте ISO / ANSI SQL-92, в спецификации которого используется только одно использование термина «Операция Set» в заголовке подраздела, следовательно, в случае заголовка в раздел назначения данных. Однако после быстрого поиска сообщения об ошибке я вижу примеры SELECT
запросов , которые, по- видимому, не связаны с назначением.
Моя вторая мысль, основанная на формулировке предупреждения SQL Server, заключалась в том, что подразумевается математическое значение множества. Тем не менее, я не думаю, что агрегация в 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%'
дает 3 других результата, которые, кажется, все также указывают SET
ключевое слово.
set operations
ссылки на UNION
и INTERSECT
и EXCEPT
, но я не могу получить ошибку, чтобы придумать NULL
ни в одном из этих обстоятельств. Я думаю, что это может быть устаревшее сообщение об ошибке.