2009-04-27 11 views
108

J'essaye d'ajouter par programme une colonne d'identité à une table Employés. Je ne sais pas ce que je fais mal avec ma syntaxe.Alter Table Ajouter une colonne 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 truc de renommer la table Temp.

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

Répondre

160

Il suffit de retirer COLUMN de ADD 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] 
+5

Pour clarifier les choses, le Le mot clé 'COLUMN' est uniquement valide (mais n pas nécessaire) dans MySQL. – ethanbustad

+1

@ethanbustad Il est également valable pour DB2 et Postgres. –

0

Il pourrait faire la table temporaire renommant si vous essayez d'ajouter une colonne au début de la table (comme cela est plus facile que de modifier l'ordre). En outre, s'il y a des données dans la table Employees, il doit insérer insert select * pour pouvoir calculer l'EmployeeID.

+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 (à travers une table temporaire)? –

+1

Dans une base de données relationnelle, vous ne devriez jamais avoir besoin de l'ordinalité des colonnes, donc si vous essayez de classer les colonnes correctement, la question est pourquoi? Si l'ordinalité des colonnes était si importante, pourquoi n'y a-t-il pas une fonction triviale pour permuter ou fixer l'ordinalité des colonnes? La raison en est que l'ordinalité n'a pas d'importance. – Shiv

2

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

ALTER TABLE table_name 
    ADD column_name column-definition; 

Dans votre cas, il sera:

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

Pour ajouter plusieurs colonnes utilisent entre parenthèses:

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

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

ALTER TABLE table_name 
    ALTER COLUMN column_name column_type; 
5

Voici comment l'ajout de nouvelles colonnes au tableau

ALTER TABLE [tableName] 
ADD ColumnName Datatype 

Par exemple,

ALTER TABLE [Emp] 
ADD Sr_No Int 

Et si vous voulez faire automatiquement incrémentée

ALTER TABLE [Emp] 
ADD Sr_No Int IDENTITY(1,1) NOT NULL 
Questions connexes