0

我讨厌发布与语法相关的问题,但老实说,我只是没有太多编写原始 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

4 回答 4

1

根据语法图,identity() 是列定义的一部分。它似乎仅在您创建列时作为一个选项可用。

这意味着这应该可以使用 identity()创建一个新列。

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);

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

我更喜欢添加带有所有约束的新列,填充它们,并在删除列之前验证一切是否按预期进行。

于 2013-05-29T23:42:10.307 回答
1

我所要做的就是将 drop 和 add 操作分成两个 ALTER TABLE 操作

    ALTER TABLE tblName
        DROP COLUMN Table_ID

    ALTER TABLE tblName
        ADD Table_ID int PRIMARY KEY IDENTITY(1,1) NOT NULL
于 2013-05-30T16:25:08.857 回答
0

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

  ALTER TABLE TableName
  ADD PRIMARY KEY (Id)

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

   alter table TableName
   alter column id int not null Identity(1,1)
于 2013-05-29T21:06:04.380 回答
0

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

alter table TableName 
add columnName int not null
primary key identity(1,1)
于 2013-12-18T18:12:56.050 回答