我想更改sql server中表的列的数据类型。我使用了以下声明:
ALTER TABLE dbo.tbltest
ALTER COLUMN ID uniqueidentifier
但它会抛出错误
操作数类型冲突:bigint与uniqueidentifier
不兼容
答案 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