Quelle est la différence entre les crochets et les guillemets pour l'aliasing dans SQL Server?

j'ai vu des noms de colonnes d'alias de personnes utilisant des guillemets simples par exemple:

select orderID 'Order No' from orders

et d'autres utilisent des crochets, par exemple:

select orderID [Order No] from orders

j'ai tendance à utiliser des crochets. Est-il de préférence/différence?

20
demandé sur taro 2013-10-29 15:33:43

4 réponses

Pour répondre à la question "est-il de préférence/différence":

Oui, il y a autant de préférences qu'il y a d'opinions, mais faites attention aux préférences que vous adoptez.

pour votre échantillon spécifique, il est tout aussi facile d'écrire une requête portable:

select OrderId as "Order Id" from Orders

que d'écrire un non-portable:

select OrderId as [Order Id] from Orders

ce n'est pas justifiable pour écrire SQL non-standard quand il y a une forme portable équivalente du même nombre de touches.

la prolifération de [] pour échapper est due à des outils comme SQL Server Management Studio et MS Access query builders, qui échappent paresseusement à tout. Cela peut ne jamais se produire pour un développeur qui passe sa carrière dans SQL Server, mais les crochets ont causé beaucoup de dépenses au cours des années portant L'accès et les applications SQL Server à d'autres plates-formes de base de données. Il en va de même pour Des outils Oracle qui citent tout. Les développeurs non formés voient le DDL comme des exemples, et procèdent ensuite à utiliser le même style lorsqu'ils écrivent à la main. Il est difficile de briser le cycle jusqu'à ce que les outils s'améliorent et que nous demandions mieux. Dans Oracle, le fait de citer, combiné avec un boîtier mixte, donne lieu à des bases de données sensibles à la casse. J'ai vu des projets où les gens citaient chaque identifiant dans la base de données, et j'ai eu le sentiment que j'étais dans le pays des perdus où les développeurs avaient évolué sur une île sans documentation ou articles sur les meilleures pratiques.

si vous écrivez votre DDL, dès le début, avec des identificateurs légaux normalisés (utilisez OrderId, ou order_Id au lieu de [Order Id], vous ne vous inquiétez pas du mot-clé mythique qui pourrait avoir besoin de caractères escape; la base de données vous informera lorsque vous avez utilisé un mot réservé. Je peux compter sur un doigt les fois où nous avons mis à jour une application D'une version de SQL Server à une autre et avons eu n'importe quel bris dû à mots réservés.

C' est souvent le sujet d'un débat houleux, donc si vous y pensez d'une autre manière:

48
répondu codenheim 2017-01-31 17:19:32

cela dépend des paramètres que vous avez en vigueur si ' s sont valables ou non. Et vous avez oublié ". Voir Identificateurs Délimités:

quand QUOTED_IDENTIFIER est défini à ON, SQL Server suit les règles ISO pour l'utilisation des guillemets doubles (")et le simple guillemet (') dans les instructions SQL. Par exemple:

  • les guillemets peuvent être utilisés uniquement pour délimiter les identificateurs. Ils ne peuvent pas être utilisés pour délimiter les chaînes de caractères.

  • les guillemets Simples doivent être utilisés pour encadrer les chaînes de caractères. Ils ne peuvent pas être utilisés pour délimiter des identificateurs.


lorsque QUOTED_IDENTIFIER est désactivé, SQL Server utilise les règles suivantes pour les guillemets simples et doubles:

  • les Guillemets ne peuvent pas être utilisés pour délimiter des identificateurs. Au lieu de cela, les crochets doivent être utilisés comme délimiteur.

  • guillemets Simples ou doubles peuvent être utilisés pour encadrer des chaînes de caractères.

Et enfin:

les délimiteurs entre parenthèses peuvent toujours être utilisés, quel que soit le paramètre de QUOTED_IDENTIFIER

Où, dans toutes les citations ci-dessus, lorsqu'ils se réfèrent aux supports qu'ils parlent de [] entre parenthèses.

4
répondu Damien_The_Unbeliever 2013-10-29 11:51:57

les guillemets Simples sont plus lisibles. Comme démontré ci-dessus, mis en évidence en rouge.

MySQL utilise` backticks ' pour échapper aux caractères spéciaux.

MSSQL peut utiliser "double guillemets" ou [parenthèses] pour les identificateurs (tableaux, colonnes, etc)

et "guillemets simples" pour des chaînes de caractères ou des alias.

les crochets sont utilisés principalement pour encapsuler les objets de sorte que les caractères spéciaux tels que les espaces, les périodes ou les traits d'Union ne jettent pas la syntaxe erreur.

je recommande d'utiliser le mot - clé' as ' avant que votre colonne n'aliase-c'est beaucoup plus lisible.

select [column with spaces] as 'my col' from "table with spaces" where n = 'foo'
select "column with spaces" as 'my col' from [table with spaces] where n = 'foo'
3
répondu Mike Causer 2014-04-13 23:20:15

La citation approche vous permet de faire ceci:

SELECT 1 AS 'bla[]bla'
1
répondu Wietze314 2013-10-29 11:43:45