Сьогодні я бачив вищезгадане повідомлення "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, полягала в тому, що математичне значення набору має на увазі. Однак я не думаю, що агрегація в SQL суворо говорить операцією набору. Навіть якщо команда SQL Server вважає це набір операцій, яка мета вводити слово "встановити" у великі літери?
Під час Googling я помітив повідомлення про помилку SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
Ті ж самі слова "SET SET" у тому самому випадку тут можуть стосуватися лише присвоєння IDENTITY_INSERTвластивості, що повертає мене до моєї першої думки.
Чи може хтось пролити якесь світло на цю справу?
SETзавжди в повному обсязі, як ключове слово
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'дає 3 інші результати, які, здається, також вказують на SETключові слова.
set operationsпосилання на UNIONта INTERSECTі EXCEPT, але я не можу отримати помилку, що з'явилася NULLв будь-якій з цих обставин. Я думаю, що це може бути повідомлення про помилку у спадщині