首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Server相关表中主键从GUID更改为BigInt的方法

Server相关表中主键从GUID更改为BigInt的方法
EN

Stack Overflow用户
提问于 2010-04-28 14:24:19
回答 3查看 1.6K关注 0票数 6

我有两个表,有1,000万到2,000万行,其中有GUID主键,至少有12张表与外键相关。基表每个有10-20个索引。

我们正在从GUID移动到BigInt主键。我想知道有没有人对这个方法有任何建议。现在,这就是我正在思考的方法:

  1. 在所涉及的所有表上删除所有索引和键。
  2. 在每个表中添加“NewPrimaryKey”列
  3. 在两个基表上设置键标识
  4. 编写数据更改脚本“更新表x,设置NewPrimaryKey =y,其中OldPrimaryKey =z
  5. 将原始主键重命名为“oldprimarykey”
  6. 重命名“NewPrimaryKey”列“PrimaryKey”
  7. 脚本返回所有索引和键。

这看起来是个好办法吗?有没有人知道有一个工具或脚本会对此有所帮助?

TD:按其他资料编辑。请参阅这篇博客文章,其中提到了GUID是主:http://www.sqlmag.com/blogs/sql-server-questions-answered/sql-server-questions-answered/tabid/1977/entryid/12749/Default.aspx时的一种方法

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-28 14:36:42

这个策略听起来确实有效--删除约束,从下面更改列(类型更改,名称保持不变),然后重新创建约束是相当优雅的。

目标是最终删除GUID列吗?如果是这样的话,除非表被复制或重建,否则您不会实际回收空间,因此可能需要进行以下调整:

..。

4.编写数据更改脚本“更新表x,设置NewPrimaryKey =y,其中OldPrimaryKey =z”

5.将原始主键删除为“旧主键”

6.重命名“NewPrimaryKey”列“PrimaryKey”

7.用脚本返回所有索引和键(构建聚集索引“重构”表)

8.对于所有没有聚集索引的表,请做一些事情以确保它们得到重建,并恢复它们的空间(例如构建,然后删除聚集索引)。

不用说,在生产运行之前,在开发框上测试它吧!

票数 0
EN

Stack Overflow用户

发布于 2010-04-28 14:29:52

你的方法是我怎么做的。

你真的需要bigint吗?一个普通的4字节int将达到20亿(2,147,483,647)。

int,bigint,smallint和tinyint

票数 3
EN

Stack Overflow用户

发布于 2010-04-28 14:45:50

我还要补充一句:

在启动之前,确保您有一个良好的当前备份。将服务器更改为以单用户模式运行(首先通知用户中断期间)。您不希望用户在进行此操作时尝试输入数据。

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

https://stackoverflow.com/questions/2730305

复制
相关文章

相似问题

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