我讨厌发布与语法相关的问题,但说实话,我在编写原始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'.
谁能告诉我我错过了什么?
答案 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)