首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GUID主键更改为整数主键

将GUID主键更改为整数主键
EN

Stack Overflow用户
提问于 2013-10-18 10:37:29
回答 1查看 2.8K关注 0票数 1

几个月前,我接管了一个应用程序,该应用程序在主表上使用Guid作为主键。最近我们遇到了一些与索引相关的数据库问题,我刚刚阅读了如何使用Guids作为主键,我已经了解到它们有多么糟糕,我认为在数据库变得太大之前,可能会对它们进行修改。

我想知道是否有一种简单的方法把它们改成Ints?有什么了不起的软件能帮我做到这一点吗?还是我说了算?

我正在考虑添加一个额外的Int列--所有适当的表,编写一些代码,根据CreationDate列使用1-n标记这个列,编写更多的代码来填充所有相关表中的列,然后将关系切换到新的int列。听起来并不难..。这是最好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 14:23:46

在结合了以上所有链接的片段之后,我想出了这个脚本,为了答案而简化了这个脚本。

更改前的表

代码语言:javascript
复制
JOB
Id Guid PK
Name nvarchar
CreationDate datetime

REPORT
Id Guid PK
JobId int
Name nvarchar
CreationDate datetime

剧本

代码语言:javascript
复制
-- Create new Job table with new Id column
select JobId = IDENTITY(INT, 1, 1), Job.*
into Job2
from Job
order by CreationDate


-- Add new JobId column to Report
alter table Report add JobId2 int

-- Populate new JobId column
update Report
set Report.JobId2 = Job2.JobId
from Job2
where Report.JobId = Job2.Id

-- Delete Old Id
ALTER TABLE Job2 DROP COLUMN Id

-- Delete Relationships
ALTER TABLE Report DROP CONSTRAINT [FK_Report_Job]
ALTER TABLE Job DROP CONSTRAINT PK_Job

-- Create Relationships
ALTER TABLE [dbo].[Job2] ADD  CONSTRAINT [PK_Job] PRIMARY KEY CLUSTERED 
([JobId] ASC) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]

ALTER TABLE [dbo].[Report]  WITH CHECK ADD  CONSTRAINT [FK_Report_Job] FOREIGN KEY([JobId2])
REFERENCES [dbo].[Job2] ([JobId])
ON DELETE CASCADE
ALTER TABLE [dbo].[Report] CHECK CONSTRAINT [FK_Report_Job]


-- Rename Columns
sp_RENAME 'Report.JobId', 'OldJobId' , 'COLUMN'
sp_RENAME 'Report.JobId2', 'JobId' , 'COLUMN'

-- Rename Tables
sp_rename Job, Job_Old
sp_rename Job2, Job

我创建Job2表是因为它意味着我不必触摸原始的作业表(除了删除关系),这样一切都可以很容易地恢复到原来的状态,以防出问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19447573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档