web-dev-qa-db-fra.com

Création de noms de table qui sont des mots/mots-clés réservés dans MS SQL Server

Puis-je nommer mes tables de base de données qui sont déjà des mots-clés? Pour mon cas, j'essaie de nommer la table qui contiendra mes utilisateurs. Je l'ai nommé Utilisateur mais il apparaît en rose dans SQL Server Management Studio, je suppose donc qu'il s'agit d'une table système ou d'un mot clé existant. Merci pour vos conseils.

Liste officielle des mots clés réservés: Mots clés réservés (Transact-SQL)

48
EverTheLearner

répétez ceci trois fois:

NE LE FAITES PAS, JE N'UTILISERA PAS LES MOTS RÉSERVÉS!

tu me remercieras!

94
racer x

Vous pouvez créer des tables avec le même nom que les mots-clés. Si vous "citez" le nom de la table, cela devrait fonctionner. Les guillemets par défaut sur le serveur SQL sont des crochets: []

CREATE TABLE [dbo].[user](
    [id] [bigint] NOT NULL,
    [name] [varchar](20) NOT NULL
) ON [PRIMARY]
64
Andy White

Oui c'est OK. Dans vos requêtes, vous pouvez mettre [et] autour du nom de votre table afin que SQL Server sache que vous vous référez à une table - c'est-à-dire 

CREATE TABLE [User] ...
SELECT * FROM [User]
8
Jakob Christensen

Vous pouvez utiliser [Utilisateur] pour faire cela. Si possible, utilisez un nom de table qui ne soit pas en conflit avec un mot clé, afin d'éviter toute confusion et tout bogue.

7
brian-brazil

Utilisez le "guillemet simple" pour Strings et "guillemet double" pour les noms de colonne.

Exemple:

INSERT INTO AccountMovement
("Date", Info)
VALUES
('2012/03/17', 'aa'),
('2012/03/17', 'bb'),
('2012/03/17', 'cc'),
('2012/03/17', 'dd')
6
Eduardo Cuomo

Je suis assis dans le camp qui dit que les noms de table doivent être au pluriel, donc dans votre cas, ce sont les utilisateurs. 

J'aime cette convention, car cela a du sens pour moi. Vous avez une collection d'utilisateurs alors appelez votre table comme ça. Plus loin en aval, si vous extrayez une ligne individuelle qui pourrait ensuite renseigner un objet nommé User. 

Si votre convention dicte l’utilisation du singulier pour les noms de table, utilisez quelque chose de différent, par exemple: Membre, Client, etc.

Voir aussi la réponse de RacerX!

Comme mentionné précédemment, il est techniquement OK si vous [Braket] le nom.

5
Jon P

Pour MS Query, j'ai trouvé que les guillemets doubles fonctionnaient parfaitement dans la requête.

select T1."Reference"
from MyTable T1
4
Viviane Rosa

Comme mentionné, vous pouvez le faire en citant le nom. Bien sûr, vous devrez également citer le nom chaque fois que vous le mentionnerez - croyez-moi, il vieillit très vite.

Soit dit en passant, le simple fait que la syntaxe SSMS colore le mot ne signifie pas nécessairement que c'est un réservé Word . SQL peut être agaçant comme ça. ;)

2
Mark Brackett

Règle de base pour les noms de table et de colonne (ou de meilleurs noms d'objet en général):

N'utilisez rien de la même chose, ou même similaire, à un mot réservé. Utilisez uniquement A-Za-z0-9 et le trait de soulignement. Surtout n'utilisez pas d'espaces. Utilisez uniquement des noms qui ne nécessitent pas d'échappement, puis n'utilisez pas l'échappement comme test perpétuel.

Vous et tous ceux qui travaillent avec vous, ou travaillerez un jour sur votre code, n’avez pas besoin de l’aggravation.

2
dkretz

Je conseillerais certainement de ne pas utiliser un mot clé réservé, comme vous le faites. La manière dont notre base de données a été conçue consiste à préfixer les noms des objets de base de données pour empêcher que de tels événements ne se produisent. Par exemple, voici une définition rapide de la manière dont je créerais un tableau 'Utilisateur':

CREATE TABLE tblUser
(
   intUserId INT
  ,vchUsername VARCHAR(255)
  ,vchEmailAddress VARCHAR(255)
  ,bitIsAccountEnabled BIT
  ,dteUpdated DATETIME
  ,dteCreated DATETIME
  ,intUpdateUserId INT
)

De cette façon, quand j'écris des requêtes. Je n'ai aucun problème à comprendre quels types de données je traite. Je n'ai pas non plus à me soucier des mots-clés réservés dans les noms de table.

0
JBond

Comme tout le monde l'a dit, ne le faites pas; Cependant, j'étais dans le même bateau. J'ai une règle qui dit que toutes mes tables sont stockées au singulier. Organisation non Organisation, actif non Actif un catalogue de pièces contient de nombreuses parties, etc.

Eh bien, j'ai une table utilisateur alors comment je l'appelle? J'ai fini par m'échapper [Utilisateur]. Maintenant, je regrette cette décision car j'oublie toujours d'échapper à la table; Cependant, je n'ai pas encore trouvé de meilleur nom: le membre est le candidat principal.

0
JoshBerke

Pas une bonne idée - pour diverses bonnes raisons

PLUS DE RAISONS POURQUOI PAS 1. Le conflit possible évident avec les noms réservés 2) Si dans deux ans, vous voulez faire un remplacement global dans votre code de dire "utilisateur" dans un champ de formulaire ou n'importe où vous êtes vissé quand Utilisation de noms génériques 3) Si vous devez rechercher des événements qui utilisent "utilisateur" dans votre code - vous savez où cela se passe (nous avons plus d'un million de lignes de code, cela nous tuerait).

WHAT WE DID 1) chaque nom de table a un début unique, comme O_nnn pour les objets F_nnn pour les données financières ... nous avons appliqué la même chose à des champs tels que opp_created pour une opportunité a été créé à la date, SUSR_RID pour un référencement 2) Autre que le préfixe, nous utilisons des noms aussi évidents que possibles, tels que O_FlightArrivalTime et non O_FltAT. Les bases de données actuelles ne montrent aucune dégradation des performances avec des noms longs . 3) Maintenant, lorsque vous utilisez OF_FlightArrivalTime en tant que nom de champ de formulaire, vous trouvez l'association facilement, mais une recherche globale de O_F ... ne trouverait que le champ de base de données, une recherche de OF_F. ... le champ de formulaire et _F .... les deux. 

0
Axel Schultze