2013-02-25 8 views
15

Sto per migrare il mio database dall'utilizzo di appartenenza precedente a quello incluso in mvc4, che utilizza anziché guid.La conversione da 'uniqueidentifier' a 'int' non è supportata sul server di database connesso

Quando si cambia il tipo ottengo l'errore seguente:

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

Come posso cambiare UserId a int tramite SQL Server Management Studio?

+1

Questi tipi di dati non sono compatibili, dovrai convertirli usando un calcolo che funziona per te – Lamak

risposta

6

si deve aggiungere una nuova colonna (ALTER TABLE ADD [NewId] INTEGER) quindi eseguire il seguente per popolare la nuova colonna 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 

ci avete una nuova colonna ID che è possibile utilizzare una chiave cluster primaria

1

La risposta precedente è corretta, ma non c'è "legatura" al valore originale.

È possibile ~ provare questo. Ma potrebbe risultare in un valore negativo.

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}); 

Questo è uno di questi "Ho strappato da Internet", quindi utilizzare a proprio rischio.

Vorrei andare con la precedente risposta di Thomas Haratyk. Ma offro questo come opzione.

39

Primo tipo di dati di modifica su qualsiasi altro tipo supportato come varbinary o altro. allora puoi convertire da quello a quello che vuoi.

+1

Funziona ... grazie ... –