在脚本的空表中删除具有 PK 约束的列

Posted

技术标签:

【中文标题】在脚本的空表中删除具有 PK 约束的列【英文标题】:Drop column with PK constraint in empty table in a script 【发布时间】:2017-01-19 16:28:04 【问题描述】:

场景 SQL Server 中的表有两列或更多列,但不再需要具有主键约束的原始列。所以现在你想编写一个脚本来删除带有 PK 约束的原始列,并将 PK 约束放在不同的列上。

在本例中,表格为

问题

如果不先删除 PK 约束,就不能删除第一列。 如果没有确切的名称,您不能在 SQL Server 中删除 PK 约束。 (more info here) ....但是您不知道自动生成的PK约束名称。

注意:如果表非空,请参阅此解决方案:SQL Server 2008 Script to Drop PK Constraint that has a System Generated Name (在大多数情况下,这是最好的解决方案。)

问题 上面的解决方案会起作用,但是当您不知道空表中的约束名称​​时,另一种方法可以用脚本删除具有 PK 约束的列吗? p>

【问题讨论】:

您似乎已经回答了有关您发布问题的确切时间的问题。这是否意味着没有问题?如果有,问题是什么? 【参考方案1】:

另一种策略——除了找出系统生成的 PK 约束名称以便您可以删除它as described here——是删除空表并重新创建它 em> 具有主键约束的原始列,而不是将其放在新列上。

删除具有未知 PK 约束名称的列:

    生成一个脚本来删除表并从头开始重新创建它 从CREATE TABLE 查询中删除OriginalColumn 列 将PK约束放在脚本中的NewColumn列 运行脚本以删除并重新创建它而不使用原始列 - 有效地删除 OriginalColumn 并将 PK 约束从 OriginalColumn“移动”到 NewColumn ??? 利润!

【讨论】:

您似乎已经回答了有关您发布问题的确切时间的问题。这是否意味着没有问题?如果有,问题是什么? @SeanLange 有没有更好的方法?这是我的解决方法,但我很好奇是否还有其他策略。

以上是关于在脚本的空表中删除具有 PK 约束的列的主要内容,如果未能解决你的问题,请参考以下文章

在 h2 数据库 (v1.4.195) 中的空表上重复选择 * 有多糟糕?

oracle如何向空表中添加一个类型为clob的非空列

在 Matlab 中创建具有行和列名的空表

DELETE - 删除一个表中的行

如何摆脱gridview WPF中的空表?

UITableview 单元格高度在空表中不起作用?