我准备将我的数据库从使用旧成员资格迁移到mvc4中包含的成员资格,后者使用int
代替guid
。
更改类型时,我会收到以下错误:
连接的数据库服务器不支持从int到uniqueidentifier的转换。
如何通过SQL Server Management Studio将UserId
更改为int
?
答案 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)