105 votes

Standard SQL pour échapper aux noms de colonnes ?

Existe-t-il un standard SQL pour échapper à un nom de colonne ? Si non, qu'est-ce qui fonctionne pour MySQL et SQLite ? Est-ce que cela fonctionne aussi pour SQL Server ?

97voto

Dean Harding Points 40164

Guillemets "

El SQL:1999 standard spécifie que le guillemet double (") ( MARQUE DE CITATION ) est utilisé pour délimiter les identifiants.

<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>

Oracle, PostgreSQL, MySQL, MSSQL et SQlite sont tous pris en charge. " comme délimiteur d'identifiant.

Ils n'utilisent pas tous " comme "défaut". Par exemple, vous devez exécuter MySQL en mode Mode ANSI et SQL Server ne le prend en charge que lorsque QUOTED_IDENTIFIER est ON .

84voto

tc. Points 23958

Selon SQLite ,

  • 'foo' est une chaîne SQL
  • "foo" est un identifiant SQL (colonne/table/etc)
  • [foo] est un identifiant dans MS SQL
  • `foo` est un identifiant dans MySQL

Pour les noms qualifiés, la syntaxe est : "t"."foo" o [t].[foo] etc.

MySQL prend en charge le standard "foo" lorsque l'option ANSI_QUOTES est activée.

3 votes

Notez que SQLite permet 'foo' pour être interprété comme un identifiant si le contexte ne permet pas une chaîne de caractères, et "foo" pour être interprété comme une chaîne de caractères si le contexte n'autorise pas un identifiant, bien qu'il y ait une note indiquant que ce comportement pourrait être supprimé dans les futures versions.

0 votes

Alors, comment fait-on "t".* ?

3 votes

@thomasrutter Ouais, j'ai été mordu par ce comportement J'ai essayé d'utiliser WHERE "nonexistent_column" = 0 et sqlite l'a joyeusement exécuté en prétendant que mon "nonexistent_column" était une chaîne de caractères. En qualifiant complètement le nom comme "my_table"."nonexistent_column" force sqlite à se comporter de manière plus stricte.

22voto

Kerry Points 7803

Pour MySQL, utilisez les tics arrière `.

Par exemple :

SELECT `column`, `column2` FROM `table`

21voto

BoltBait Points 8044

Pour MS SQL, utilisez [ et ].

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]

2 votes

Vous pouvez avoir des espaces dans les noms de colonnes avec ms sql !?!

3 votes

Tu peux ! Je ne le ferais pas, cependant.

1 votes

Oui, vous pouvez avoir des espaces ou des mots réservés comme noms d'entités dans MSSQL. Vous devez simplement les [ ].

2voto

Pour DBASE/DBF, utilisez [ y ]

SELECT [DATE], [TIME], [ANY_OTHER_TO_BE_ESCAPED_COLUMN] FROM [TABLE]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X