sql-server - SQL Server - 更改 PK 数据类型的最佳方法是什么?

标签 sql-server database sql-server-2005 primary-key

我目前有一个包含大约 20 个引用表的数据库,即产品、 Assets 、仓库、用户等内容。这些信息存储在中央数据库中,并下载到外出工程师的 PDA 上.我数据库中的每个表都有一个 UniqueIdentifier(即 GUID)的 PK。

经过 2 年的产品开发,我意识到我从来没有也永远不需要编辑任何这些引用表。因此,他们不需要将 UniqueIdentifiers 作为主键。

由于我在通过我的网络服务将它们发送到 PDA 之前对我的所有收藏进行序列化,因此由于 GUID 的长度,实际的序列化数据非常庞大。

无论如何,进入正题 - 我想将表的所有 PK 更改为 IDENTITY Ints。有什么简单的方法可以做到这一点,还是我必须按照切断所有 FK、创建临时表,然后编写一些软件来重新映射数据的路线进行?

提前致谢。

最佳答案

首先 - 哈哈。我认识贵公司的很多其他人...“哇 - GUID 很酷,我将在任何地方使用它们...”至少您认识到走这条路的问题之一。

其次 - 您可能会发现这些命令很有用:

exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 

<do stuff here>

exec sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 

第三 - 它说的部分 - 在这里做事 -

1) add an int autoincrementing identity column to ref table
2) set the current fk guid in data tables to the db key you just created in step 1
3) rinse/repeat for each ref table/data table combination
4) after all is done, refactor code to use id (int) instead of guid

我会让 guids 单独呆几个月,以防万一你需要调整/修复任何东西。在将来的某个时候,您应该能够从您的引用表中删除 guid。

关于sql-server - SQL Server - 更改 PK 数据类型的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/468345/

相关文章:

sql - 字符串拆分列并连接到另一个表

sql - 如何在 SQL 2000/2005 中执行区分大小写的搜索和替换?

sql-server - SQL Server 和 Excel 认为两个明显相同的字符串不相等

php - mysql查询锁定数据库

php - 使用两个数据库 Yii 1

asp.net - 为什么我会间歇性地收到此错误? "The server was not found or was not accessible"

SQL 条件求和

java - Android Studio Sql Server 连接

sql-server - 从查询 SQL Server 中的 XML 列返回多行(重新访问)

c# - 当信息要保存在不同的表中时,如何将信息保存到我的数据库中?