tsql - 有没有一种简单的方法可以从两个整数复合键创建唯一的整数键?

标签 tsql math primary-key uniqueidentifier composite-key

出于与问题不太相关的各种原因,我有一个表,其中包含一个由两个整数组成的复合键,我想从这两个数字中创建一个唯一的键。我最初的想法是将它们连接起来,但是当我意识到 (51,1) 的组合键会产生与 (5,11) 相同的唯一键,即 511 时,我很快就遇到了问题。

有没有人有聪明的方法从两个整数中生成一个整数,这样生成的整数对于这对起始整数是唯一的?

编辑:在面对令人印象深刻的数学之后,我意识到我应该包含的一个细节是有问题的键的大小。在原始对中,第一个 key 目前是 6 位数字,并且可能在系统生命周期内保持 7 位数字;第二个键还没有超过 20。考虑到这些限制,问题看起来不那么令人生畏了。

最佳答案

如果您希望生成的 key 包含与其两个组件相同的位数,则可以从数学上证明这是不可能的。但是,如果您从两个 32 位整数开始,并且可以使用 64 位整数作为结果,您显然可以执行以下操作:

key1 << 32 | key2

SQL 语法
SELECT key1 * POWER(2, 32) + key2

关于tsql - 有没有一种简单的方法可以从两个整数复合键创建唯一的整数键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745048/

相关文章:

c# - 从单个 for 循环生成乘法表

mysql - MySQL 中的数据库模式设计和外键

sql - 如何在SQL的where子句中调用存储过程

javascript - 在 Canvas 中间创建等边三 Angular 形?

sql - 尝试创建大型动态查询时,不断被截断

C++ 在 O(nlog(n)) 时间内检查这个条件?

sql-server-2008-r2 - 子表的主键是否正确?

php - 获取刚刚插入MySQL数据库的行的id

sql - 在具有不同名称的列上连接表但在结果中产生单列

sql - 如何将行更新时间和行更新用户添加到表中?