2017-01-19 26 views
0

方案
在SQL Server中的表有兩列或多列,但不再需要與主鍵約束的原始列。所以現在你想編寫一個腳本來刪除原始列w/PK約束,並將PK約束放在不同的列上。與空表PK約束drop列在腳本

在此示例中,表格爲爲空

問題

  • 沒有首先下跌的PK約束不能刪除的第一列。
  • 而且您不能刪除SQL Server中的PK約束,而沒有它的確切名稱。
    more info here
  • ....但你不知道PK約束的自動生成的名稱。

注意:如果表是不是空,看到這樣的解決方案:(在大多數情況下,這是最好的解決方案)
SQL Server 2008 Script to Drop PK Constraint that has a System Generated Name

問題
上述解決方案將工作,但什麼是另一種方式腳本刪除列有PK的約束,當你沒有一個空表知道約束的名字?

+0

您似乎已回答了有關您發佈問題的確切時間的問題。這是否意味着沒有問題?如果是這樣,那麼問題是什麼? –

回答

0

另一種策略 - 除了找出產生的PK約束的名稱,以便您可以刪除它as described here系統 - 是刪除空表,並與主鍵約束創建它沒有原始列,而是把它放在新的專欄上。

要與未知PK約束名刪除列:

  1. 生成一個腳本,刪除該表,並從頭開始重新創建
  2. CREATE TABLE查詢中刪除OriginalColumn
  3. 在腳本中的NewColumn列上添加PK限制
  4. 運行腳本以在沒有原始列的情況下刪除並重新創建 - 有效地刪除g OriginalColumn和「移動」PK約束從OriginalColumnNewColumn
  5. ???
  6. 利潤!
+0

您似乎已回答了有關您發佈問題的確切時間的問題。這是否意味着沒有問題?如果是這樣,那麼問題是什麼? –

+0

@SeanLange有沒有更好的方法?這是我的解決方法,但我很好奇,如果有任何其他策略。 – AndrewRalon