【问题标题】:How to alter an already created table to drop and re-create the primary key? [closed]如何更改已创建的表以删除并重新创建主键? [关闭]
【发布时间】:2020-12-23 01:45:33
【问题描述】:
我有这张桌子:
Create table Product (
[Id] int primary key not null,
[Name] varchar (250),
[Price] money
)
表已经创建好了,现在我想用[Id]作为主键[Name]。
我不想重新创建表格,而只想ALTER它。
【问题讨论】:
标签:
sql
sql-server
sql-server-2008
alter-table
【解决方案1】:
ALTER TABLE Product DROP PRIMARY KEY, ADD PRIMARY KEY(Id, Name);
【解决方案2】:
您应该始终明确地命名您的约束。
由于您没有指定 CONSTRAINT 名称,SQL Server 将为您的 PK 生成一个默认名称,例如:PK__Product__9CC368536561EF8B。
因此,您需要使用 SSMS 手动删除它,或者使用动态 SQL,查询 sys.key_constraints 以获取名称并删除约束,因为它已经 answered here。
此外,您还需要在创建新 PK 之前将列 Name 设置为 NOT NULL,并确保所有行都没有 NULL 值
ALTER TABLE Product ALTER COLUMN Name varchar (250) NOT NULL;
这是一个db-fiddle
【解决方案3】:
要修改主键,您可以执行 ALTER TABLE Product DROP PRIMARY KEY 语句来删除现有的主键,然后执行 ALTER TABLE ALTER column-name column-alteration 语句来设置表的新主键
ALTER TABLE Product DROP PRIMARY KEY, ADD PRIMARY KEY(Id, Name);
【解决方案4】:
我复制了您的问题以及解决方案...
在这里我找到了您的表的主要名称
select CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where TABLE_NAME = 'Product' and CONSTRAINT_TYPE = 'PRIMARY KEY'
从上面的查询中获取返回值,并在下面的查询中替换(PK_Product_3214EC07822AF903)
alter table Product drop constraint PK__Product__3214EC07822AF903
主键不能为空
alter table Product alter column [Name] varchar (250) NOT NULL
最后,设置新的主键
alter table Product add constraint PK_Product primary key ([Name])