如何仅使用表名从 SQL Server 中删除主键约束

Posted

技术标签:

【中文标题】如何仅使用表名从 SQL Server 中删除主键约束【英文标题】:How to remove primary key constraint from SQL Server with table name only 【发布时间】:2015-09-04 05:38:39 【问题描述】:

我想从表 mytable 中删除主键约束。

mysql 中,我们可以像删除主键约束一样

ALTER TABLE *mytable* DROP PRIMARY KEY

如何在 SQL Server 中执行此操作?

感谢您提前回复。 :)

NB:我在 SQL Server 中有一个表列表来删除主键约束。主键约束是否有默认名称

create table mytable 
(
     column_a integer not null,
     column_b integer not null,

     primary key (column_a, column_b)
);

【问题讨论】:

如果您通过 SSMS NewTable 设计功能进行设计,我认为表中 PK 约束的默认名称是 PK_tableName 谢谢@KnockKnock 所以下面的语句会起作用。是吗? ; String q_str="ALTER TABLE "+my_table+" 删除约束 PK_"+my_table; 是的,如果nameOfConstraint 是正确的,那应该可以工作。您找到您的 PKConstraint 的名称了吗?使用 SSMS,您可以通过右键单击 Table 找到它,然后单击 Design。然后在 Design 选项卡中,右键单击 Row,选择 Indexes/Keys 并在 Indexes/Keys 窗口中查看 PK 等约束列表那里。希望对您有所帮助。 【参考方案1】:

您不能在 SQL Server 中执行此操作 - 必须先确定 PK 约束的 名称。如果您要根据固定的命名架构为主键约束提供 explicit 名称 - 那么也许您可以仅使用表名来完成......但如果您让 SQL Server 处理命名自己....

您可以从sys.key_constraints 目录视图中确定 PK 约束的名称,如果您运行此查询, 您将获得(作为输出)作为ALTER TABLE ..... DROP CONSTRAINT ..... 命令列表,然后您可以使用这些命令删除所有 你的桌子上的限制:

SELECT 
    'ALTER TABLE ' + SCHEMA_NAME(t.schema_id) + '.' + t.Name + 
    ' DROP CONSTRAINT ' + k.name
FROM 
    sys.key_constraints k
INNER JOIN 
    sys.tables t ON k.parent_object_id = t.object_id
WHERE 
    k.type = 'PK'
    AND t.Name IN ('myTable', 'myTable2')   -- etc.

【讨论】:

感谢您的宝贵回答。以下查询是否正确? ALTER TABLE 'my_table' DROP CONSTRAINT (SELECT k.name FROM sys.key_constraints k INNER JOIN sys.tables t ON k.parent_object_id = t.object_id WHERE k.type = 'PK' AND t.Name ='myTable')跨度> @apm: 不,你不能那样做 - 你需要先找到 PK 的名称,然后你必须使用 动态 SQL 如果你想要使用该 PK 名称构建您的 SQL 语句并执行它。您不能使用子选择或 SQL 变量“参数化”表、列或约束名称。 好的。谢谢你的回复

以上是关于如何仅使用表名从 SQL Server 中删除主键约束的主要内容,如果未能解决你的问题,请参考以下文章

如何修改sql server主键自动增长

SQLSERVER数据库中如何删除

SQL Server 2008 R2列属性修改

sql server 中 怎么让自动增1的主键列 临时的 让它可以手动插入指定值?

SQL中清除数据库里面的所有表中数据,要求删除以后表还在。

sqlserver删除外键关系