【问题标题】:How to remove primary key constraint from SQL Server with table name only如何仅使用表名从 SQL Server 中删除主键约束
【发布时间】: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 等约束列表那里。希望对您有所帮助。

标签: sql database constraints primary-key mssql-jdbc


【解决方案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 变量“参数化”表、列或约束名称。
  • 好的。谢谢你的回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
相关资源
最近更新 更多