删除/添加包含主键-SQL语法错误的列

时间:2013-05-29 21:02:52

标签: sql sql-server-2008 syntax

我讨厌发布与语法相关的问题,但说实话,我在编写原始SQL语句时没有多少经验。如果这是一个简单的问题,我道歉。我有一个包含几百个条目的表,并且表的创建者忘记将ID列指定为主键,并且忘记设置标识约束。因此,我需要删除旧的ID列并创建一个新的ID列,并将其设置为主键和标识列。我知道我可以使用SSMS手动修改表,但我需要编写一个可以传递给我的客户端的脚本,因为他们已经在生产中使用了这个数据库,并且需要对几个不同的表进行此更改。脚本看起来像这样:

    ALTER TABLE tblName
        DROP COLUMN Table_ID
        ADD Table_ID int PRIMARY KEY IDENTITY(1,1) NOT NULL

当我执行上述查询时,收到以下消息:

    Msg 102, Level 15, State 1, Line 3
    Incorrect syntax near 'Table_ID'.

谁能告诉我我错过了什么?

4 个答案:

答案 0 :(得分:1)

根据语法图,identity()是column definition的一部分。它只在您创建列时才可用作选项。

这意味着这应该可以创建一个带有identity()的 new 列。

alter table tblName
add new_column_name integer not null identity(1, 1);

这应该使新列成为主键。

alter table tblName
add constraint new_column_name_pk
primary key (new_column_name);

您可能希望在单个事务中执行这两个语句。你可能没有。

我更喜欢添加包含所有约束的新列,填充它们,并在删除列之前验证所有内容是否符合预期。

答案 1 :(得分:0)

如果id列已经是Identity,只需修改表以使id列成为主键

  ALTER TABLE TableName
  ADD PRIMARY KEY (Id)

如果不是,那么也要对列进行更改。

   alter table TableName
   alter column id int not null Identity(1,1)

答案 2 :(得分:0)

我所要做的就是将drop分开,并将操作添加到两个ALTER TABLE操作

    ALTER TABLE tblName
        DROP COLUMN Table_ID

    ALTER TABLE tblName
        ADD Table_ID int PRIMARY KEY IDENTITY(1,1) NOT NULL

答案 3 :(得分:0)

在现有表中创建具有主键常量的标识字段:

alter table TableName 
add columnName int not null
primary key identity(1,1)