テーブル追加列構文の変更


142

プログラムでID列をEmployeesテーブルに追加しようとしています。構文で何が間違っているのかわからない。

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'の近くの構文が正しくありません。

回答:


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
明確にするために、 'COLUMN'キーワードはMySQLでのみ有効です(必須ではありません)。
ethanbustad 2015

4
@ethanbustadこれは、DB2およびPostgresにも有効です。
ᴠɪɴᴄᴇɴᴛ

3
彼らはcolumnキーワードを無視するだけでなく、他のすべてのDBと同じように機能するのではないかとんでもない。
Bruce Pierson

ちなみに、この場合、OracleはSQL Serverと同じように動作します。どちらもステートメントで許可さCOLUMNれていませんADD
bsplosion

10

これは、テーブルに新しい列を追加する方法です

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

テーブルの先頭に列を追加しようとしている場合は、一時テーブルの名前を変更している可能性があります(順序を変更するよりも簡単です)。また、Employeesテーブルにデータがある場合、EmployeeIDを計算できるように、select *を挿入する必要があります。


1
「順序を変更する方が簡単」-(一時テーブルを介して)テーブルを再作成せずに列の順序を変更することは(より困難ですが)可能であることを意味しますか?
ÖrjanJämte

1
リレーショナルデータベースでは、列の順序が必要になることはないはずです。列を適切に順序付けしようとする場合、問題はなぜでしょうか。列の順序性が非常に重要である場合、列の順序性を交換または修正する簡単な関数がないのはなぜですか?その理由は、順序性が問題にならないように設計されているためです。
Shiv 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.