从bigint将列的数据类型更改为uniqueidentifier

时间:2012-06-20 08:08:54

标签: sql-server-2008 type-conversion

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

ALTER TABLE dbo.tbltest  
ALTER COLUMN ID uniqueidentifier

但它会抛出错误

  

操作数类型冲突:bigint与uniqueidentifier

不兼容

5 个答案:

答案 0 :(得分:26)

请按照以下步骤操作: -

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

2)。使用ALTER TABLE dbo.tbltest
ALTER COLUMN ID varchar(200)

3)。再来一次 ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier

要清楚,您无法直接将列从numeric转换为uniqueidentifier,

但你可以转换数字 - > varchar - >唯一标识符

答案 1 :(得分:4)

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

答案 2 :(得分:3)

使用实体框架的人员注意:
显然,如果你有一个具有复杂关系的大型数据库,删除所有关系和ID列,并重新添加它们是一个巨大的考验。

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

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

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

答案 3 :(得分:0)

如果Singh的回答不起作用,那么你可能不得不放弃表并重新创建它。

答案 4 :(得分:0)

我不同意其他回答,这些回答指出如果不删除数据就无法做到这一点。实际上,@ Lucero在他的评论中已经避开了正确的方法。

您当然可以将BigInt转换为UniqueIdentifier(如果需要,可以再次转换。)您无需删除表,截断数据或进行其他更根本的操作,然后运行一些命令。这需要两个步骤:

ALTER TABLE dbo.tbltest ALTER COLUMN [ID] VARBINARY(8)
ALTER TABLE dbo.tbltest ALTER COLUMN [ID] UNIQUEIDENTIFIER

现在请记住,因为BitInt值为8个字节,而UniqueIdentifier为16个字节,所以只有生成的GUID的前半部分将为非零值,因此最终得到的Guid如下所示:

  

E38E4965-8DFC-4FF3-0000-000000000000