连接的数据库服务器不支持从'uniqueidentifier'到'int'的转换

时间:2013-02-25 14:23:45

标签: sql-server uniqueidentifier ssms

我准备将我的数据库从使用旧成员资格迁移到mvc4中包含的成员资格,后者使用int代替guid

更改类型时,我会收到以下错误:

  

连接的数据库服务器不支持从int到uniqueidentifier的转换。

如何通过SQL Server Management Studio将UserId更改为int

5 个答案:

答案 0 :(得分:55)

首先将数据类型更改为任何其他受支持的类型,如varbinary或任何其他类型。然后你可以从那里转换成你想要的。

答案 1 :(得分:8)

您必须添加新列(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 :(得分:1)

之前的答案是正确的,但没有与原始值“绑定”。

你可以试试这个。但它可能导致负值。

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

这是其中一个“我从互联网上扯下来”,所以请自担风险。

我会接受Thomas Haratyk先前的回应。但我提供这个选项。

答案 3 :(得分:0)

参考this帖子:

删除当前列并添加具有所需数据类型的新列应该可以解决您的问题。

答案 4 :(得分:0)

我们知道; 唯一标识符变量为32个字节; int是8个字节,bigint是16个字节。

我们将convert转换为第一个字节,并在uniqueidentifier之后。

简单代码;

Select CAST( CAST(cast(0 as bigint) AS varbinary)+CAST(cast(88 as bigint) AS varbinary) as uniqueidentifier)