在数据库项目中将 Int 更改为 uniqueidentifier
Posted
技术标签:
【中文标题】在数据库项目中将 Int 更改为 uniqueidentifier【英文标题】:Changed Int to uniqueidentifier in a Database Project 【发布时间】:2017-03-31 15:27:46 【问题描述】:我想在数据库项目中将主键列从 int
更改为 uniqueidentifier
。我尝试更改类型但得到可预测的错误,因为 SQL Server 无法将 int
转换为 guid
。 (Original Image):
+ ------------ + -------------- + ----------- + ------- +
| Name | Data_Type | Allow Nulls | Default |
+ ------------ + -------------- + ----------- + ------- +
| OrderImageId | int | No | |
| OrderId | int | No | |
| Image | varbinary(MAX) | Yes | |
| FileName | nvarchar(Max) | Yes | |
+ ------------ + -------------- + ----------- + ------- +
create table [dbo].[OrderImages]
(
[OrderImageId] int not null primary key identity,
[OrderId] int not null
Constraint [FK_OrderImages_Orders] foreign key (OrderId) references [Orders]([OrderId]),
[Image] varbinary(Max) null,
[FileName] nvarchar(max) null
)
我知道如何在 SQL Server Management Studio 中执行此操作(创建一个单独的 guid 列、填充它、删除 PK、为 guid 列设置 PK 等),但是可以在数据库项目中执行此操作吗?如果我的 PK 列有 FK 怎么办?
【问题讨论】:
【参考方案1】:为此,您需要创建一个新表并迁移数据,替换您要用来替换现有整数数据的 guid。
话虽如此,在这里使用唯一标识符并不是一个好主意。 128 位本质上是随机的数据会导致碎片。如果您希望每个订单有超过 40 亿张图像,并且可能有多个图像,则可以使用 bigint。
如果每个订单不超过一张图片,您可以使用 OrderID 作为主键(没有身份约束),避免需要在 OrderID 上添加非聚集索引。
【讨论】:
以上是关于在数据库项目中将 Int 更改为 uniqueidentifier的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中将值 char 数组的类型更改为 int? [复制]