Изменить синтаксис добавления столбца в таблицу


146

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

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 полностью переименовал временную таблицу.

ОБНОВЛЕНИЕ : я думаю, что он задыхается от первого оператора с «неправильным синтаксисом рядом с ключевым словом 'COLUMN'».

Ответы:


199

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

9
Чтобы уточнить, ключевое слово COLUMN допустимо (но не обязательно) только в MySQL.
ethanbustad,

4
@ethanbustad Это также верно для DB2 и Postgres.
ᴠɪɴᴄᴇɴᴛ 02

3
Смешно, что они не просто игнорируют columnключевое слово и заставляют его работать, как и любую другую БД.
Брюс Пирсон

К вашему сведению, Oracle в этом случае ведет себя так же, как SQL Server - оба не допускаются COLUMNв ADDзаявлении.
bsplosion

14

Вот как Добавление нового столбца в таблицу

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

5

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

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;

0

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


1
"проще, чем изменить порядок" - Вы имеете в виду, что можно (хотя и сложнее) изменить порядок столбцов без воссоздания таблицы (через временную таблицу)?
Örjan Jämte

1
В реляционной базе данных вы никогда не должны нуждаться в порядковом порядке столбцов, поэтому, если вы пытаетесь аккуратно упорядочить столбцы, возникает вопрос: почему? Если порядковый номер столбца был так важен, почему не существует тривиальной функции для замены или исправления порядкового номера столбцов? Причина в том, что обыденность не имеет значения.
Shiv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.