Запросы для таблиц и столбцов, названных в качестве ключевых слов - PullRequest
1 голос
/ 25 января 2010

Предположим, SQL Server 2005 +.

Часть A:

Каков канонический способ запроса из системы / внутренних / мета / любых таблиц / представлений (извините, не ниндзя базы данных) для любого пользователя таблицы или столбец имена, которые используют ключевые слова SQL Server (например, case)?

Я не против вести список ключевых слов, если он не поддерживает запросы, так как он меняется только с поддерживаемыми версиями SQL Server (верно?).

Глядя на доступные представления в SQL Server 2005, я достаточно легко могу запросить эту информацию из INFORMATION_SCHEMA.COLUMNS и INFORMATION_SCHEMA.TABLES, но я хочу быть уверен, что она из наилучшего возможного местоположения для проверки на будущее.

Часть B:

Можно ли получить список ключевых слов по запросу?

ОБНОВЛЕНИЕ: Хотя это полезная концепция, я специально не заинтересован в экранировании названий столбцов / таблиц / и т. Д., Так как я надеюсь написать инструмент, который будет проверьте таблицы / столбцы / и т. д., которые имеют общие имена с ключевыми словами и предоставляют полезные предупреждения разработчикам. Этот инструмент будет использоваться во время проверки кода в моем офисе, чтобы указать, что разработчик может захотеть переименовать объект. (Или, надеюсь, разработчик до рецензирует код для собственного блага!) Я могу даже настроить его для использования с непрерывной интеграцией в мои скрипты сборки, но это всего лишь мысль на будущее.

Ответы [ 3 ]

2 голосов
/ 25 января 2010

Вы должны правильно процитировать используемые имена. Если вы генерируете код, используйте встроенную функцию QUOTENAME . Не создавайте список известных ключевых слов, вместо этого указывайте каждое имя, используемое для каждого объекта, включая имя базы данных, имя схемы и имя объекта. Также убедитесь, что вы всегда придерживаетесь правильного регистра участвующих объектов. Рекомендуется разрабатывать на экземпляре сервера сортировки с учетом регистра. Разработка кода для сопоставления серверов без учета регистра (по умолчанию) может привести к сбою в работе при развертывании на серверах сопоставления с учетом регистра.

Для части A

Лично я бы пошел на sys.columns и sys.objects на самом деле. Представления INFORMATION_SCHEMA также хороши, и теоретически они «переносимы», хотя я просто гораздо больше привык к специфическим для SQL. Я выбираю sys.objects против sys.tables, потому что он охватывает больше (например, views). Я бы посоветовал вам также рассмотреть функции с табличными значениями, типы параметров с табличными значениями (только в 2008 году) и временные #tables и table @variables, объявленные внутри хранимых процедур. Это исключило бы только temp #tables и table @variables, объявленные в пакетах, отправляемых клиентами, но они в основном только в коде клиента.

1 голос
/ 25 января 2010

A: Просто используйте квадратные скобки вокруг вашего идентификатора.

select [procedure].[case] from [procedure]

B: Я не уверен, что вы можете запросить их, но есть страница MSDN об этом.

Если вы нуждаетесь в них программно, я предлагаю вам вставить их все в таблицу для собственных нужд.

0 голосов
/ 25 января 2010

Зачем вам нужен список ключевых слов? a: они меняются не очень часто, и b: для любого обычного кода (я исключаю такие вещи, как «sql server management studio») вы можете просто использовать квадратные скобки:

SELECT [table].[column], [table].[join]
FROM [table]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...