Преобразование из 'uniqueidentifier' в 'int' не поддерживается на подключенном сервере базы данных

Я собираюсь перенести мою базу данных с помощью старого членства в состав, включенный в mvc4, который использует int вместо guid.

При изменении типа я получаю следующую ошибку:

Преобразование из int в uniqueidentifier не поддерживается на подключенном сервере базы данных.

Как изменить UserId на int через SQL Server Management Studio?

Ответы

Ответ 1

Вам нужно добавить новый столбец (ALTER TABLE ADD [NewId] INTEGER), а затем запустите следующий столбец 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

У вас есть новый столбец ID, в котором вы можете использовать кластерный первичный ключ

Ответ 2

Сначала измените тип данных на любой другой поддерживаемый тип типа varbinary или что-нибудь еще. то вы можете конвертировать из этого в то, что хотите.

Ответ 3

Предыдущий ответ верен, но исходное значение не привязано.

Вы можете попробовать. Но это может привести к отрицательному значению.

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

Что один из них "я разорвал из интернета", поэтому используйте на свой страх и риск.

Я бы пошел с предыдущим ответом Томаса Харатика. Но я предлагаю это как вариант.