2017-03-31 58 views
0

我想在數據庫項目中將主鍵列從int更改爲uniqueidentifier。我試圖改變類型,但得到了可預測的錯誤,因爲SQL Server無法將int轉換爲​​。 (Original Image):在數據庫項目中將Int更改爲uniqueidentifier

+ ------------ + -------------- + ----------- + ------- + 
| Name   | Data_Type  | Allow Nulls | Default | 
+ ------------ + -------------- + ----------- + ------- + 
| OrderImageId | int   | No   |   | 
| OrderId  | int   | No   |   | 
| Image  | varbinary(MAX) | Yes   |   | 
| FileName  | nvarchar(Max) | Yes   |   | 
+ ------------ + -------------- + ----------- + ------- + 

create table [dbo].[OrderImages] 
(
    [OrderImageId] int not null primary key identity, 
    [OrderId] int not null 
     Constraint [FK_OrderImages_Orders] foreign key (OrderId) references [Orders]([OrderId]), 
    [Image] varbinary(Max) null, 
    [FileName] nvarchar(max) null 
) 

我知道該怎麼做,在SQL Server Management Studio中(創建一個單獨的GUID列,填充它,刪除PK,設置PK的GUID列等),但有可能做到這一點在一個數據庫項目?如果我的PK專欄有FK呢?

回答

2

要做到這一點,您將需要創建一個新表並遷移數據,替換您想用來替換現有整數數據的guid。

這就是說,在這裏使用uniqueidentifier不是一個好主意。它是128位本質上隨機的數據,會導致碎片。如果您希望每個訂單有超過40億張圖像可能具有多個圖像,則可以使用bigint。

如果每個訂單隻有一個圖像,則可以使用OrderID作爲主鍵(不帶身份約束),並避免需要在OrderID上添加非聚集索引。