web-dev-qa-db-fra.com

Comment traiter les noms de colonnes SQL qui ressemblent à des mots-clés SQL?

Une de mes colonnes s'appelle from. Je ne peux pas changer le nom parce que je ne l'ai pas fait. Suis-je autorisé à faire quelque chose comme SELECT from FROM TableName ou existe-t-il une syntaxe spéciale pour éviter toute confusion avec SQL Server?

203
Nathan H

Placez le nom de la colonne entre parenthèses comme suit: from devient [de].

select [from] from table;

Il est également possible d'utiliser les éléments suivants (utiles pour interroger plusieurs tables):

select table.[from] from table;
324
tvanfosson

Si cela avait été dans PostgreSQL, utilisez des guillemets doubles autour du nom, comme:

select "from" from "table";

Remarque: en interne, PostgreSQL convertit automatiquement toutes les commandes et tous les paramètres sans guillemets en minuscules. Cela a pour effet que les commandes et les identificateurs ne sont pas sensibles à la casse. sEleCt * from tAblE; est interprété comme select * from table;. Cependant, les paramètres entre guillemets doubles sont utilisés tels quels, et sont donc sensibles à la casse: select * from "table"; et select * from "Table"; obtient le résultat de deux tables différentes.

21
some

Pendant que vous le faites, alias le comme autre chose (ou mieux encore, utilisez une vue ou un SP et déconseillez l’ancienne méthode d’accès direct).

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

Votre question semble avoir bien répondu ici, mais je veux juste ajouter un autre commentaire à ce sujet.

Les concepteurs de la base de données doivent bien connaître les mots clés réservés et éviter de les utiliser. Si vous découvrez que quelqu'un l'utilise, informez-le (de manière polie). Le mot clé ici est réservé Word.

Plus d'information:

"Les mots clés réservés ne doivent pas être utilisés comme noms d'objet. Les bases de données mises à niveau à partir de versions antérieures de SQL Server peuvent contenir des identificateurs comprenant des mots non réservés dans la version précédente, mais des mots réservés pour la version actuelle de SQL Server. Vous pouvez vous reporter à la objet en utilisant des identificateurs délimités jusqu'à ce que le nom puisse être modifié. " http://msdn.Microsoft.com/en-us/library/ms176027.aspx

et

"Si votre base de données contient des noms correspondant à des mots clés réservés, vous devez utiliser des identificateurs délimités lorsque vous vous référez à ces objets. Pour plus d'informations, voir Identifiants (DMX)." http://msdn.Microsoft.com/en-us/library/ms132178.aspx

10
Eigir

Ce sont les deux façons de le faire:

  1. Utilisez la citation comme ici:

SELECT `from` FROM TableName

  1. Vous pouvez mentionner avec le nom de la table comme:

SELECT TableName.from FROM TableName

9
Sunil Kapil

Si vous utilisez SQL Server, vous pouvez simplement envelopper les crochets autour du nom de la colonne ou de la table.

select [select]
from [table]
8
John Baughman

Bonjour, je travaille sur des systèmes Teradata entièrement conformes à la norme ANSI. Utilisez des guillemets doubles "" pour nommer ces colonnes.

Par exemple. type est un mot clé réservé SQL et, lorsqu'il est utilisé entre guillemets, type est traité comme un nom spécifié par l'utilisateur.

Voir ci-dessous exemple de code:

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
3
preyingrazor

J'ai également fait face à ce problème. Et la solution à cela est de placer [Column_Name] comme ceci dans la requête.

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

Cela fonctionnera donc parfaitement bien.

3
Muneeb Hassan

Dans Apache Drill, utilisez des guillemets arrières:

select `from` from table;
3
Kun Wu

À en juger par les réponses et par ma propre expérience. La seule réponse acceptable, si vous envisagez d'être portable, est de ne pas utiliser de mots-clés SQL pour les noms de table, de colonne ou autres.

Toutes ces réponses fonctionnent dans les différentes bases de données mais apparemment, beaucoup ne supportent pas la solution ANSI.

1
David Bradley

Vous pouvez mettre le nom de votre colonne entre crochets comme ceci:

Select  [from] from < ur_tablename>

Ou

Mettez dans une table temporaire puis utilisez comme vous voulez.
Exemple:

Declare @temp_table table(temp_from varchar(max))

Insert into @temp_table
Select * from your_tablename

Ici, je suppose que votre nom_table ne contient qu’une colonne (c’est-à-dire de).

1
user247487

Dans MySQL, vous pouvez également utiliser l'interface utilisateur pour modifier les noms de colonne, au lieu d'utiliser des guillemets arrières (`). Cliquez avec le bouton droit de la souris sur la table> Modifier la table> Modifier le nom de la colonne contenant le mot clé SQL> Valider.

select [from] from <table>

Notez que ce qui précède ne fonctionne pas dans MySQL

1
Anna

Ce qui suit fonctionnera parfaitement:

SELECT DISTINCT table.from AS a FROM table
1
user3797709

J'ai couru dans le même problème en essayant de mise à jour une colonne dont le nom était mot-clé. La solution ci-dessus ne m'a pas aidé. Je l'ai résolu en spécifiant simplement le nom de la table comme ceci:

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