2009-04-27 2 views
108

Я пытаюсь программно добавить столбец идентификации в таблицу Employees. Не уверен, что я делаю неправильно с моим синтаксисом.Alter Table Добавить столбец Синтаксис

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] 

Что я делаю неправильно? Я попытался экспортировать скрипт, но SQL Mgmt Studio выполняет переименование всей таблицы Temp Table.

UPDATE: Я думаю, что задыхается от первого оператора с «Неправильный синтаксис около ключевого слова„COLUMN“.»

ответ

160

Просто удалите COLUMN из 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

Для уточнения, то Ключевое слово «COLUMN» действует только (но n ot требуется) в MySQL. – ethanbustad

+1

@ethanbustad Он также применим для DB2 и Postgres. –

0

Можно делать временную таблицу переименования, если вы пытаетесь добавить столбец в начало таблицы (как это проще, чем изменять порядок). Кроме того, если в таблице «Сотрудники» есть данные, он должен сделать insert select *, чтобы он мог вычислять EmployeeID.

+1

«проще, чем изменить порядок». Вы имеете в виду, что возможно (хотя и сложнее) изменить порядок столбцов без воссоздания таблицы (через временную таблицу)? –

+1

В реляционной базе данных вы никогда не должны нуждаться в обыденности столбцов, поэтому, если вы пытаетесь аккуратно упорядочить столбцы, возникает вопрос: почему? Если значение столбца было так важно, почему нет тривиальной функции для замены или исправления порядковых номеров столбцов? Причина в том, что он предназначен для того, чтобы обыденность не имела значения. – Shiv

2

Правильный синтаксис для добавления столбца в таблице:

ALTER TABLE table_name 
    ADD column_name column-definition; 

В вашем случае это будет:

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

Чтобы добавить несколько столбцов использовать скобки:

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

COLUMN ключевое слово в SQL SERVER используется только для изменения:

ALTER TABLE table_name 
    ALTER COLUMN column_name column_type; 
5

Это как добавление нового столбца в таблице

ALTER TABLE [tableName] 
ADD ColumnName Datatype 

Например

ALTER TABLE [Emp] 
ADD Sr_No Int 

И если вы хотите, чтобы он автоматически увеличивается

ALTER TABLE [Emp] 
ADD Sr_No Int IDENTITY(1,1) NOT NULL 
Смежные вопросы