在脚本的空表中删除具有 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 约束的列的主要内容,如果未能解决你的问题,请参考以下文章