我目前有一个包含大约 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/