17

我想更改 sql server 中表中列的数据类型。我使用了以下语句:

ALTER TABLE dbo.tbltest  
ALTER COLUMN ID uniqueidentifier

但它会抛出错误

操作数类型冲突:bigint 与 uniqueidentifier 不兼容

4

5 回答 5

31

您不能从整数转换为uniqueidentifier. 但是你可以这样做。

  1. 首先从表中删除旧数据。

  2. 将列更改为某种文本格式(例如VARCHAR(200))。

    ALTER TABLE dbo.tbltest  
    ALTER COLUMN ID VARCHAR(200)
    
  3. 现在又
    ALTER TABLE dbo.tbltest  
    ALTER COLUMN ID uniqueidentifier
    

需要明确的是,您不能将列从 numeric直接转换为uniqueidentifier,但可以转换numeric为。varcharuniqueidentifier

于 2012-06-20T08:19:48.733 回答
4

您需要先添加列(可能使用默认值或可为空,以便该列可以成功添加到具有现有数据的行),将其更新为您想要或需要的值,更改任何键(如果它是主键更改它到新列,然后还更改此表的任何外键),然后删除旧列并根据需要更改新列(例如设置标识种子,删除可为空等)。

于 2012-06-20T08:15:38.793 回答
3

使用 Entity Framework 的人请注意:
显然,如果您有一个具有复杂关系的大型数据库,则删除所有关系和 ID 列并重新添加它们是一项巨大的考验。

更新生成的模型 (.edmx) 要容易得多。

是的,Visual Studio 允许您更新数据类型而不会抱怨。实际上,当您保存 .edmx 文件时,将验证关系;您可能错过的任何字段都将显示为错误。

完成后,您可以从模型中重新生成数据库。砰,完成。

于 2013-10-29T04:54:02.997 回答
0

如果 Singh 的回答不起作用,那么您可能必须删除该表并重新创建它。

于 2016-11-14T21:12:55.143 回答
0

我不同意其他答案,即如果不删除数据就无法做到这一点。事实上,@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

于 2019-11-26T01:42:49.533 回答