2013-02-25 19 views
15

Mam zamiar przenieść moją bazę danych z wykorzystaniem starego członkostwa do tego zawartego w mvc4, który używa int zamiast guid.Konwersja z "uniqueidentifier" na "int" nie jest obsługiwana na podłączonym serwerze bazy danych.

Przy zmianie rodzaju dostaję następujący błąd:

Conversion from int to uniqueidentifier is not supported on the connected database server.

Jak mogę zmienić UserId do int poprzez SQL Server Management Studio?

+1

Te typy danych nie są kompatybilne, musisz je przekonwertować za pomocą obliczeń, które działają dla ciebie – Lamak

Odpowiedz

6

Trzeba dodać nową kolumnę (ALTER TABLE ADD [NewId] INTEGER), a następnie uruchomić następujące czynności, aby zapełnić nową kolumnę ID:

WITH Cte 
AS 
(
    SELECT * 
    , ROW_NUMBER() OVER(ORDER BY [Your GUID Column Here] DESC) AS RowNumber 
    FROM YourTable 
) 
UPDATE Cte 
SET [NewId]= RowNumber 
GO 

Nie masz nową kolumnę identyfikator, który można użyć klucza skupione pierwotne

1

Poprzednia odpowiedź jest prawidłowa, ale nie ma "powiązania" z pierwotną wartością.

Możesz ~ wypróbować to. Ale może to spowodować wartość ujemną.

Guid g = new Guid("{cccc3333-3333-3333-cccc-cccc3333cccc}"); 
byte[] _bytes = g.ToByteArray(); 
Int64 i = ((Int64)_bytes[0]) | ((Int64)_bytes[1] << 8) | ((Int64)_bytes[2] << 16) | ((Int64)_bytes[3] << 24); 



Int64 i = -3333333; 
Guid g = new Guid(i, 0, 0, new byte[] {0, 0, 0, 0, 0, 0, 0, 0}); 

To jeden z tych "wyrwanych z Internetu", więc używaj na własne ryzyko.

Chciałbym pójść z poprzednią odpowiedzią Thomasa Haratyka. Ale proponuję to jako opcję.

39

Najpierw zmień typ danych na dowolny inny obsługiwany typ, taki jak varbinary lub cokolwiek innego. wtedy możesz przekonwertować z tego na to, co chcesz.

+1

Działa ... dzięki ... –