Modifier la table Ajouter la syntaxe de colonne

142

J'essaie d'ajouter par programme une colonne d'identité à une table Employés. Je ne sais pas ce que je fais de mal avec ma syntaxe.

ALTER TABLE Employees
  ADD COLUMN EmployeeID int NOT NULL IDENTITY (1, 1)

ALTER TABLE Employees ADD CONSTRAINT
    PK_Employees PRIMARY KEY CLUSTERED 
    (
      EmployeeID
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

Qu'est-ce que je fais mal? J'ai essayé d'exporter le script, mais SQL Mgmt Studio fait tout un changement de nom de Temp Table.

MISE À JOUR : Je pense qu'il s'étouffe sur la première déclaration avec "Syntaxe incorrecte près du mot-clé 'COLUMN'."

BuddyJoe
la source

Réponses:

195

Retirez simplement COLUMNdeADD COLUMN

ALTER TABLE Employees
  ADD EmployeeID numeric NOT NULL IDENTITY (1, 1)

ALTER TABLE Employees ADD CONSTRAINT
        PK_Employees PRIMARY KEY CLUSTERED 
        (
          EmployeeID
        ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Vikram
la source
9
Pour clarifier, le mot clé 'COLUMN' n'est valide (mais pas obligatoire) dans MySQL.
ethanbustad
4
@ethanbustad Il est également valable pour DB2 et Postgres.
ᴠɪɴᴄᴇɴᴛ
3
Il est ridicule de ne pas simplement ignorer le columnmot - clé et de le faire fonctionner comme toutes les autres bases de données.
Bruce Pierson
Pour info, Oracle se comporte de la même manière que SQL Server dans ce cas - les deux ne le permettent pas COLUMNdans l' ADDinstruction.
bsplosion
11

Voici comment ajouter une nouvelle colonne à la table

ALTER TABLE [tableName]
ADD ColumnName Datatype

Par exemple

ALTER TABLE [Emp]
ADD Sr_No Int

Et si vous voulez l'incrémenter automatiquement

ALTER TABLE [Emp]
ADD Sr_No Int IDENTITY(1,1) NOT NULL
Chirag Thakar
la source
1
hmm hmm, wa siga wah
eirenaios
5

La syntaxe correcte pour ajouter une colonne dans une table est:

ALTER TABLE table_name
  ADD column_name column-definition;

Dans votre cas, ce sera:

ALTER TABLE Employees
  ADD EmployeeID int NOT NULL IDENTITY (1, 1)

Pour ajouter plusieurs colonnes, utilisez des crochets:

ALTER TABLE table_name
  ADD (column_1 column-definition,
       column_2 column-definition,
       ...
       column_n column_definition);

COLUMN Le mot clé dans SQL SERVER est utilisé uniquement pour modifier:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;
Dzianis Yafimau
la source
0

Il peut s'agir de renommer la table temporaire si vous essayez d'ajouter une colonne au début de la table (car c'est plus facile que de modifier l'ordre). De plus, s'il y a des données dans la table Employés, il doit insérer select * pour pouvoir calculer le EmployeeID.

neouser99
la source
1
"plus facile que de modifier l'ordre" - Voulez-vous dire qu'il est possible (bien que ce soit plus difficile) de modifier l'ordre des colonnes sans recréer la table (via une table temporaire)?
Örjan Jämte
1
Dans une base de données relationnelle, vous ne devriez jamais avoir besoin de l'ordinalité des colonnes, donc si vous essayez d'organiser proprement les colonnes, la question est de savoir pourquoi? Si l'ordinalité des colonnes était si importante, pourquoi n'y a-t-il pas une fonction triviale pour permuter ou corriger l'ordinalité des colonnes? La raison est qu'il est conçu pour que l'ordinalité n'ait pas d'importance.
Shiv