2012-12-09 108 views
1

我有一個數據庫,使用SQL Server遷移助理從MySql遷移而來,現在存儲在Azure中。更改SQL數據庫上的主鍵

SSMA顯然生成了一個新的主鍵列,名爲ssma$rowid,其中一個表。我試圖改變PK回Card_Key,但我收到以下錯誤:

An error was encountered while applying the changes.
An exception occurred while executing the Transact-SQL statement:
ALTER TABLE [carddb].[Cards] ALTER COLUMN [Card_Key] INT NOT NULL.
The index 'Card_Key' is dependent on column 'Card_Key'.
ALTER TABLE ALTER COLUMN Card_Key failed because one or more objects
access this column.

我怎樣才能讓Card_Key的PK再次?

+1

刪除名爲'Card_Key'的索引並重試? – Andomar

+0

如果我這樣做,我會失去Card_Key中的所有值,對吧? – Mason240

+0

如果您只是刪除索引('drop index ...'),則不會丟失任何數據或值。你只是失去了查詢速度更快的索引。 – Andomar

回答

1

最簡單的方法是用正確的主鍵創建一個新表[cards2],並將[card]中的數據複製到新表中(只需運行INSERT INTO cards2 ... SELECT ... FROM卡) 。完成之後,您可以放下(或重新命名爲[cardsold]放在安全的一邊)原始表[cards],並將新表重命名爲[cards]:sp_rename cards2,cards

這應該有效。

+0

這是我最終做的。我有一種感覺,即新的數據庫結構(由SQL生成)將會更好地發揮SSMA自動轉換的功能。 – Mason240