Как обращаться с именами столбцов SQL, которые выглядят как ключевые слова SQL?

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

Ответ 1

Оберните имя столбца в скобках так, from станет [from].

select [from] from table;

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

select table.[from] from table;

Ответ 2

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

SELECT [from] AS TransferFrom -- Or something else more suitable
FROM TableName

Ответ 3

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

select "from" from "table";

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

Ответ 4

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

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

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

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

и

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

Ответ 5

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

select [select]
from [table]

Ответ 6

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

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

SELECT `from` FROM TableName

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

SELECT TableName.from FROM TableName

Ответ 7

Привет, я работаю над системами 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

Ответ 8

Я также столкнулся с этой проблемой. И решение для этого - поместить [Column_Name] в запрос.

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

Таким образом, он будет работать отлично.

Ответ 9

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

select `from` from table;

Ответ 10

Вы можете поместить свое имя столбца в скобку, например:

Select  [from] from < ur_tablename>

или

Поместите в темпоральную таблицу, затем используйте как хотите.
Пример:

Declare @temp_table table(temp_from varchar(max))

Insert into @temp_table
Select * from your_tablename

Здесь я просто предполагаю, что your_tablename содержит только один столбец (т.е. от).

Ответ 11

Я столкнулся с той же проблемой при попытке обновить столбец, имя которого было ключевым словом. Решение выше не помогло мне. Я решил это, просто указав имя таблицы следующим образом:

UPDATE `survey`
SET survey.values='yes,no'
WHERE (question='Did you agree?')

Ответ 12

Следующее будет работать отлично:

SELECT DISTINCT table.from AS a FROM table

Ответ 13

В MySQL, альтернативно, используя обратные кавычки (`), вы можете использовать пользовательский интерфейс для изменения имен столбцов. Щелкните правой кнопкой мыши таблицу > Таблица изменений > Изменить имя столбца, содержащее ключевое слово sql > Commit.

select [from] from <table>

Как примечание, вышесказанное не работает в MySQL