Como lidar com nomes de colunas SQL que se parecem com palavras-chave SQL?

Uma das minhas colunas é chamada. Eu não posso mudar o nome porque não consegui. Tenho permissão para fazer algo como SELECT from FROM TableName ou existe uma syntax especial para evitar que o SQL Server fique confuso?

Embrulhe o nome da coluna entre parênteses, assim, a from torna from se [de].

 select [from] from table; 

Também é possível usar o seguinte (útil ao consultar várias tabelas):

 select table.[from] from table; 

Enquanto você está fazendo isso – alias como outra coisa (ou melhor ainda, use uma visão ou um SP e pragueja o antigo método de access direto).

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

Se estiver no PostgreSQL, use aspas duplas em torno do nome, como:

 select "from" from "table"; 

Nota: Internamente, o PostgreSQL converte automaticamente todos os comandos e parâmetros não nomeados para minúsculas. Isso tem o efeito de que comandos e identificadores não diferenciam maiúsculas de minúsculas. sEleCt * do tAblE; é interpretado como select * from table; . No entanto, os parâmetros entre aspas duplas são usados ​​como estão e, portanto, são sensíveis a maiúsculas e minúsculas: select * from “table”; e selecione * de “Tabela”; Obtém o resultado de duas tabelas diferentes.

Sua pergunta parece estar bem respondida aqui, mas eu só quero adicionar mais um comentário a este assunto.

Aqueles que projetam o database devem estar bem cientes das palavras-chave reservadas e evitar usá-las. Se você descobrir alguém usando, informe-o (de uma maneira educada). A palavra-chave aqui é palavra reservada .

Mais Informações:

“Palavras-chave reservadas não devem ser usadas como nomes de object. Bancos de dados atualizados de versões anteriores do SQL Server podem conter identificadores que incluem palavras não reservadas na versão anterior, mas que são palavras reservadas para a versão atual do SQL Server. Você pode consultar o object usando identificadores delimitados até que o nome possa ser alterado. ” http://msdn.microsoft.com/pt-br/library/ms176027.aspx

e

“Se o seu database contiver nomes que correspondam a palavras-chave reservadas, você deve usar identificadores delimitados quando se referir a esses objects. Para obter mais informações, consulte Identificadores (DMX).” http://msdn.microsoft.com/pt-br/library/ms132178.aspx

Se você estiver usando o SQL Server, basta simplesmente agrupar os colchetes ao redor do nome da coluna ou da tabela.

 select [select] from [table] 

Estas são as duas maneiras de fazer isso:

  1. Use aspas de volta como aqui:

SELECT `from` FROM TableName

  1. Você pode mencionar com o nome da tabela como:

SELECT TableName.from FROM TableName

Eu também enfrentei esse problema. E a solução para isso é colocar [Column_Name] assim na consulta.

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

Por isso vai funcionar perfeitamente bem.

No Apache Drill, use backquotes:

 select `from` from table; 

Oi eu trabalho em sistemas Teradata que é completamente compatível com ANSI. Use aspas duplas “” para nomear tais colunas.

Por exemplo, type é uma palavra-chave SQL reservada e, quando usada entre aspas, o type é tratado como um nome especificado pelo usuário.

Veja abaixo o exemplo de código:

 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 

O seguinte irá funcionar perfeitamente:

 SELECT DISTINCT table.from AS a FROM table 

Você pode colocar o nome da coluna entre colchetes como:

 Select [from] from < ur_tablename> 

Ou

Coloque em uma tabela temporária, em seguida, use como quiser.
Exemplo:

 Declare @temp_table table(temp_from varchar(max)) Insert into @temp_table Select * from your_tablename 

Aqui eu apenas suponho que seu_tablename contém apenas uma coluna (ou seja, de).

Eu corri no mesmo problema ao tentar atualizar uma coluna cujo nome era uma palavrachave . A solução acima não me ajudou. Eu resolvi simplesmente especificando o nome da tabela da seguinte forma:

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

No MySQL, como alternativa ao uso de back quotes (`), você pode usar a UI para alterar os nomes das colunas. Clique com o botão direito na tabela> Alterar tabela> Edite o nome da coluna que contém a palavra-chave sql> Commit.

 select [from] from 

Como nota, o acima não funciona no MySQL

A julgar pelas respostas aqui e pela minha própria experiência. A única resposta aceitável, se você está planejando ser portátil, não usa palavras-chave SQL para tabelas, colunas ou outros nomes.

Todas essas respostas funcionam nos vários bancos de dados, mas aparentemente não suportam a solução ANSI.