2017-03-31 4 views
0

Ich möchte eine Primärschlüsselspalte von int zu uniqueidentifier in einem Datenbankprojekt ändern. Ich habe versucht, den Typ zu ändern, bekam aber einen vorhersehbaren Fehler, weil SQL Server int nicht in guid konvertieren kann. (Original Image):Int in uniqueidentifier in einem Datenbankprojekt geändert

+ ------------ + -------------- + ----------- + ------- + 
| 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 
) 

Ich weiß, wie es in SQL Server Management Studio zu tun (eine separate GUID-Spalte erstellen, füllen Sie es, löschen PK, Set PK für guid Spalte usw.), aber ist es möglich, es zu tun in einem Datenbankprojekt? Und was, wenn meine PK-Spalte FKs hat?

Antwort

2

Um dies zu tun, müssen Sie eine neue Tabelle erstellen und die Daten migrieren. Dabei ersetzen Sie die vorhandenen Guides, um die vorhandenen Integer-Daten zu ersetzen.

Das gesagt, eine Unique Identifier hier ist keine gute Idee. Es sind 128 Bits von im Wesentlichen zufälligen Daten, die eine Fragmentierung verursachen. Wenn Sie mehr als 4 Milliarden Bilder mit möglicherweise mehreren Bildern pro Auftrag erwarten, können Sie einen Bigint verwenden.

Wenn nicht mehr als ein Bild pro Bestellung vorhanden ist, können Sie die Bestell-ID als Primärschlüssel (ohne Identitätsbeschränkung) verwenden und müssen keinen Nonclustered-Index für OrderID hinzufügen.

Verwandte Themen