Почему «Lookup» окрашен как зарезервированное для функции слово в SQL Server?

14

В SSMS 2208 идентификатор «Lookup» окрашен в ярко-розовый цвет, как если бы он был функцией (такого же цвета, как, скажем, «Power» или «Convert»). Почему?

Я не могу найти его в официальном списке зарезервированных слов . Поиски в Интернете кажутся бесполезными, поскольку существует огромное количество терминов «поиск», которые не имеют никакого отношения к моему вопросу.

ErikE
источник
1
Все, что я могу думать, - это функция поиска SSRS ( msdn.microsoft.com/en-us/library/ee210531.aspx ). Хороший вопрос. +1
Томас Стрингер
@Shark хорошая находка, но я ожидаю, что другие функции будут следовать аналогичным правилам, но они не выделяются в SSMS, например COUNTDISTINCT, COUNTROWSи RUNNINGVALUEдолжны работать так же.
Аарон Бертран

Ответы:

14

Сначала я подумал, что он пришел из Sybase (откуда, конечно, и возник SQL Server), у которого есть функция поиска , но это связано с PowerBuilder. А потом я проверил SQL Server 2000, и он не горит розовым в Query Analyzer ...

введите описание изображения здесь

... если бы это было наследие от Sybase, я бы ожидал, что он будет в списке слов с цветовой кодировкой. Возможно, я предполагаю, что файл грамматики был обновлен и что он был опущен «по ошибке» в 2000 году, но я сомневаюсь в этом. Гораздо более вероятно, что он окрашен, потому что он указан в языковой службе T-SQL как будущее слово совместимости, или он был брошен в языковую службу в ожидании использования. (Я жду официального подтверждения этого, и я поделюсь, что я могу.)

Некоторые другие забавные примеры ( я жаловался на некоторые из них на Connect еще в 2008 году , но он был закрыт как «Не исправлять») на несоответствующее выделение слов, которых также нет в списке, который вы цитируете:

  • Domains загорается зеленым
  • Description загорается синим цветом
  • Server загорается синим цветом
  • Instead загорается синим цветом
  • RC2и RC4загораются синим цветом

введите описание изображения здесь

В то время я не запечатлел Lookupни Insteadпримеров, и я уверен, что есть и другие. Хотя я предполагаю, что документ, который вы просматриваете, не настолько актуален, как мог бы быть; по крайней мере, INSTEADдолжен быть в этом списке, так как теперь он является частью T-SQL (так как были введены триггеры INSTEAD OF). Могу поспорить, что есть как минимум 20 других ключевых слов, которые были добавлены для SQL Server 2012, но также не включены в этот список. Быстро сканирований есть некоторые заметные исключения , которые должны быть там: OFFSET, IIF, FORMATи т.д.

Другой пример, который вы можете найти интересным; попробуйте поместить слово как INSTEADв строку, но в отдельной строке. Это работает нормально, но это не выглядит так:

SELECT 'foo 
INSTEAD
';

введите описание изображения здесь

(Это любезно предоставлено @JonSeigel сообщением об ошибке .)

Я, вероятно, подал и прокомментировал пару десятков других ошибок в подсветке синтаксиса Management Studio ; это конечно не идеально. Я ценю, что вы хотите знать, почему, но мы не можем в конечном итоге узнать. Как вы можете видеть из множества этих элементов Connect, они обычно игнорируют / откладывают их или исправляют без особого объяснения.

Аарон Бертран
источник
2
Я забыл о них! Я столкнулся с вашей отправкой в ​​Connect некоторое время назад.
ErikE
Кстати, «INSTEAD» имеет смысл, поскольку триггеры могут быть INSTEAD OF UPDATE. Но это не зарезервированное слово ...
ErikE
@ErikE я выделил «вместо» , потому что это ключевое слово, просто нет в списке (еще один клочок доказательств того, что это грубо устарело).
Аарон Бертран
«сайт» выделяется синим цветом и отсутствует в списке зарезервированных ключевых слов
Simon D