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

时间:2017-01-19 16:28:05

标签: sql-server database tsql ssms sql-scripts

方案
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约束的列的脚本< / em>的

1 个答案:

答案 0 :(得分:0)

另一个策略 - 除了弄清楚PK约束的系统生成名称以便你可以删除它as described here - 是删除空表并重新创建它 具有主键约束的原始列,而不是将其放在新列上。

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

  1. 生成一个脚本以删除表并从头开始重新创建
  2. OriginalColumn查询
  3. 中删除CREATE TABLE
  4. 将PK约束放在脚本
  5. 中的NewColumn列上
  6. 运行脚本以删除并重新创建它而不使用原始列 - 有效地删除OriginalColumn和&#34;移动&#34;从OriginalColumnNewColumn
  7. 的PK约束
  8. ???
  9. 利润!