2013-01-10 50 views
0

我想添加一個主鍵到現有的表。我認爲最好的方法是將SELECT INTO放入臨時表中,然後刪除並創建表,然後INSERT INTO從臨時表中創建表。有沒有可能由此產生的問題?如何在添加主鍵後重建表格?

這是最佳做法嗎?

SET XACT_ABORT ON 

--SAVE DATA 
SELECT * INTO #TempTable 
FROM dbo.OldTable AS tt 

-- Drop and Create dbo.OldTable 

-- Restore data 
INSERT INTO dbo.OldTable (Column1, Column2, Column3) 
SELECT 
    tt.Column1, 
    tt.Column2, 
    tt.Column3 
FROM #TempTable AS tt 

COMMIT TRANSACTION -- roll back in case there are any FK issues 

該數據庫在SQL Server 2008中實現

+0

哪個RDBMS?它是否支持自動遞增鍵? –

+0

我假設你是指DB生成的PK?例如。一個mysql自動增量或一個pgsql序列(或類似的)?如果是這樣,那麼我認爲臨時表是最簡單的方法,如果它適合您的數據大小。 –

+0

如果它支持像Oracle或PostgreSQL這樣的序列,則它在SQL Server 2008 –

回答

1
  1. 創建新表作爲期望。
  2. 插入新表格。
  3. 拖放舊桌子。
  4. 重命名新的。
+0

有什麼理由爲什麼這種方法比使用臨時表更安全或首選? –

+0

一個插入而不是兩個。 –

2

您不必重新創建表格。使用此腳本:

ALTER TABLE dbo.YourTable ADD PRIMARY KEY (KeyColumn1,KeyColumn2); 
0

最好的方法是添加PK「現場」,因爲這將節省您的處理時間和使用的日誌空間。

因此,只要做到以下幾點:

alter table dbo.OldTable add constraint PK_OldTable primary key (xxx) 
+0

歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)語法突出它! –