Змінити таблицю Додати синтаксис стовпця


142

Я намагаюся програмно додати стовпчик ідентичності до таблиці Співробітники. Не впевнений, що я роблю неправильно зі своїм синтаксисом.

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

ОНОВЛЕННЯ : Я думаю, що він задихається в першому твердженні з "Неправильним синтаксисом біля ключового слова" КОЛОНА "."

Відповіді:


195

Просто видаліть 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
Для уточнення, ключове слово "КОЛОН" дійсне (але не обов'язково) у MySQL.
етанбустад

4
@ethanbustad Він також дійсний для DB2 та Postgres.
ᴠɪɴᴄᴇɴᴛ

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

FYI, Oracle в цьому випадку поводиться так само, як і SQL Server - обидва не дозволяють COLUMNу ADDвиписці.
bsplosion

11

Ось як додавання нового стовпця до таблиці

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

1
hmm hmm, wa siga wah
eirenaios

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 *, щоб вона могла обчислити EmployeeeID.


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

1
У реляційній базі даних у вас ніколи не виникає необхідності в регулярності стовпців, тому якщо ви намагаєтесь чітко упорядкувати стовпці, питання чому? Якщо звичайність стовпців була настільки важливою, чому не існує тривіальної функції для заміни або виправлення порядковості стовпців? Причина полягає в тому, що звичайність не має значення.
Шив
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.