我想更改 sql server 中表中列的数据类型。我使用了以下语句:
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
但它会抛出错误
操作数类型冲突:bigint 与 uniqueidentifier 不兼容
我想更改 sql server 中表中列的数据类型。我使用了以下语句:
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
但它会抛出错误
操作数类型冲突:bigint 与 uniqueidentifier 不兼容
您不能从整数转换为uniqueidentifier
. 但是你可以这样做。
首先从表中删除旧数据。
将列更改为某种文本格式(例如VARCHAR(200)
)。
ALTER TABLE dbo.tbltest
ALTER COLUMN ID VARCHAR(200)
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
需要明确的是,您不能将列从 numeric直接转换为uniqueidentifier
,但可以转换numeric
为。varchar
uniqueidentifier
您需要先添加列(可能使用默认值或可为空,以便该列可以成功添加到具有现有数据的行),将其更新为您想要或需要的值,更改任何键(如果它是主键更改它到新列,然后还更改此表的任何外键),然后删除旧列并根据需要更改新列(例如设置标识种子,删除可为空等)。
使用 Entity Framework 的人请注意:
显然,如果您有一个具有复杂关系的大型数据库,则删除所有关系和 ID 列并重新添加它们是一项巨大的考验。
更新生成的模型 (.edmx) 要容易得多。
是的,Visual Studio 允许您更新数据类型而不会抱怨。实际上,当您保存 .edmx 文件时,将验证关系;您可能错过的任何字段都将显示为错误。
完成后,您可以从模型中重新生成数据库。砰,完成。
如果 Singh 的回答不起作用,那么您可能必须删除该表并重新创建它。
我不同意其他答案,即如果不删除数据就无法做到这一点。事实上,@Lucero 在他的评论中已经避开了正确的方法来做到这一点。
您当然可以将 BigInt 转换为 UniqueIdentifier(如果您愿意,可以再转换回来。)您不需要删除表、截断数据或执行任何更激进的操作,然后运行一些命令。它需要两个步骤:
ALTER TABLE dbo.tbltest ALTER COLUMN [ID] VARBINARY(8)
ALTER TABLE dbo.tbltest ALTER COLUMN [ID] UNIQUEIDENTIFIER
现在请记住,只有生成的 GUID 的前半部分是非零值,因为 BitInt 值是 8 个字节,而 UniqueIdentifier 是 16 个字节,所以您最终会得到如下所示的 Guid:
E38E4965-8DFC-4FF3-0000-000000000000