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

25
我即将从旧版会员资格迁移到mvc4中包含的新版会员资格,该版本使用 int 而不是 guid

更改类型时,我遇到了以下错误:

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

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


1
这些数据类型不兼容,您需要使用适合您的计算方法进行转换。 - Lamak
4个回答

77

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


1
有时候需要在更改了另一种类型后进行“保存”操作;另一方面不会起作用。 - p__d
它也适用于从“int”到“uniqueidentifier”的转换。 - Leo
值得指出的是,可以从正在更改类型的列中删除索引。 - Danny Beckett

10

您需要添加一个新的列(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

正如我们所知道的,唯一标识变量是32字节;int是8字节,bigint是16字节。

我们进行转换时,首先是第一个字节,然后是唯一标识符。

简单的代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接