Как работать с именами столбцов SQL, которые выглядят как ключевые слова SQL? - PullRequest
196 голосов
/ 13 ноября 2008

Одна из моих колонок называется from. Я не могу изменить имя, потому что я не сделал это. Могу ли я сделать что-то вроде SELECT from FROM TableName или существует специальный синтаксис, чтобы избежать путаницы в SQL Server?

Ответы [ 14 ]

318 голосов
/ 13 ноября 2008

Оберните имя столбца в скобки следующим образом: from становится [from].

select [from] from table;

Также можно использовать следующее (полезно при запросе нескольких таблиц):

select table.[from] from table;
21 голосов
/ 15 ноября 2008

Если это было в PostgreSQL, используйте двойные кавычки вокруг имени, например:

select "from" from "table";

Примечание. Внутренне PostgreSQL автоматически преобразует все команды без кавычек и параметры в нижний регистр. Это приводит к тому, что команды и идентификаторы не чувствительны к регистру. sEleCt * от tAblE; интерпретируется как select * from table; . Однако параметры внутри двойных кавычек используются как есть, и поэтому учитывают регистр: select * from "table"; и select * from "Table"; получает результат из двух разных столы.

19 голосов
/ 13 ноября 2008

Пока вы это делаете - создайте псевдоним как-нибудь еще (или, что еще лучше, используйте представление или SP и не используйте старый метод прямого доступа).

SELECT [from] AS TransferFrom -- Or something else more suitable
FROM TableName
10 голосов
/ 13 ноября 2008

Ваш вопрос, кажется, здесь хорошо ответил, но я просто хочу добавить еще один комментарий к этой теме.

Те, кто проектирует базу данных, должны хорошо знать зарезервированные ключевые слова и избегать их использования. Если вы обнаружите, что кто-то использует его, сообщите ему об этом (вежливо). Ключевое слово здесь зарезервировано слово.

Дополнительная информация:

"Зарезервированные ключевые слова не должны использоваться как имена объектов. Обновлены базы данных из более ранних версий SQL Server может содержать идентификаторы, которые включают слова не зарезервированы ранее версия, но это зарезервированные слова для текущей версии SQL Server. Вы можете обратиться к объекту с помощью идентификаторы с разделителями до имени может быть изменено." http://msdn.microsoft.com/en-us/library/ms176027.aspx

и

"Если ваша база данных содержит имена которые соответствуют зарезервированным ключевым словам, вы должны использовать идентификаторы с разделителями, когда вы обратитесь к этим объектам. Для большего информацию, см. Идентификаторы (DMX). " http://msdn.microsoft.com/en-us/library/ms132178.aspx

8 голосов
/ 04 апреля 2015

Это два способа сделать это:

  1. Используйте обратную цитату, как здесь:

SELECT `from` FROM TableName

  1. Вы можете указать имя таблицы как:

SELECT TableName.from FROM TableName

7 голосов
/ 13 ноября 2008

Если вы используете SQL Server, вы можете просто заключить квадратные скобки в столбец или имя таблицы.

select [select]
from [table]
3 голосов
/ 01 апреля 2016

В Apache Drill используйте обратные кавычки:

select `from` from table;
2 голосов
/ 10 ноября 2013

Я тоже сталкивался с этой проблемой. И решение этой проблемы заключается в том, чтобы поместить [Column_Name] как это в запросе.

string query= "Select [Name],[Email] from Person";

Так что это будет прекрасно работать.

2 голосов
/ 09 сентября 2012

Привет, я работаю на системах Teradata, которые полностью совместимы с ANSI. Используйте двойные кавычки "", чтобы назвать такие столбцы.

например. type является зарезервированным ключевым словом SQL, а при использовании в кавычках type обрабатывается как указанное пользователем имя.

См. Пример кода ниже:

CREATE TABLE alpha1
AS
(
SEL
product1
type_of_product AS "type"
FROM beta1
) WITH DATA
PRIMARY INDEX (product1)

--type is a SQL reserved keyword

TYPE

--see? now to retrieve the column you would use:

SEL "type" FROM alpha1
1 голос
/ 08 февраля 2018

Судя по ответам здесь и моему собственному опыту. Единственный приемлемый ответ, если вы планируете быть переносимым, - не использовать ключевые слова SQL для таблицы, столбца или других имен.

Все эти ответы работают в различных базах данных, но, очевидно, многие из них не поддерживают решение ANSI.

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