如何仅使用表名从 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 中删除主键约束的主要内容,如果未能解决你的问题,请参考以下文章