【问题标题】:How To Delete One More Primary Keys in SQL?如何在 SQL 中再删除一个主键?
【发布时间】:2018-08-10 13:17:41
【问题描述】:

我尝试删除 SQL 上一张表的所有主键。 如果我有一个主键,我可以删除此代码行:

ALTER TABLE dbo.TblName DROP CONSTRAINT PK_TblName;

但是,如果我还有一个主键,我会出现这个错误:

消息 3728,第 16 级,状态 1,第 18 行 'PK_TblBooks' 不是约束。 消息 3727,第 16 级,状态 0,第 18 行 无法删除约束。查看以前的错误。

我在 C# 上尝试了这个,但它们没有被删除:

String sql= "SELECT COL_NAME(ic.object_id,ic.column_id) AS ColumnName FROM sys.indexes AS i INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id WHERE i.is_primary_key = 1 AND ic.object_id = i.object_id";
SqlCommand cmd= new SqlCommand(sql, con);
SqlDataAdapter adp= new SqlDataAdapter(cmd);
DataTable dtsk = new DataTable();
adp.Fill(dtsk);

for (int i = 0; i < dtsk.Rows.Count; i++)
{
String remove= "ALTER TABLE " + Table + " DROP CONSTRAINT PK_" + Table + "";
SqlCommand cmd1= new SqlCommand(remove, con);
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
}

如何解决这个问题?

【问题讨论】:

  • 再次检查约束的名称,你可能只是输入错误。或者您是否多次执行相同的语句?每个约束都有自己唯一的名称。在上面的语句中,该约束的名称是 PK_TblName
  • @Igor 这是我想删除表名中所有主键的名字。
  • 仅供参考,每个表只能有一个主数据库。
  • @Callout 不是 100% 清楚,但是如果这两个字段都定义为同一张表上的主键字段,那么不,那是一个由多个 组成的主键- 也称为复合主键。一个表中只能有一个主键。但无论如何,错误消息与此无关……您似乎正在尝试删除不存在的内容。
  • @Callout 没有向我们展示,而是在告诉我们。发个截图,不然我不信。

标签: sql sql-server primary-key alter-table


【解决方案1】:

尝试使用dynamic sql删除某些表的pk。

declare @sql nvarchar(max) = '';
with CTE as (
  select T1.*,T2.name tableName from sys.key_constraints T1
  left join sys.objects T2 on T1.parent_object_id = T2.object_id
  where T2.name = 'T' --your table name
)
select @sql = concat(@sql,'ALTER table ',tableName,' DROP CONSTRAINT ',name,';')
from CTE;

exec(@sql); --delete T table all pk 

select * from sys.key_constraints; --result:null

测试 DDL:

CREATE TABLE T
    ([col1] varchar(2), [col2] varchar(2)
       ,constraint PK_TblName unique (col1)
       ,constraint PK_TblName2 unique (col1)
    )
;

online demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2014-03-09
    • 2016-02-17
    • 2023-04-06
    • 2023-03-19
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多