我有一个包含ID和区域设置的表。使用不同的区域设置可以多次列出相同的ID:
ID Locale
123456 EN_US
234567 EN_US
234567 EN_CA
345678 EN_US
我需要为每条记录以数字ID(整数)的形式创建唯一标识符,同时保持对原始组件进行反向工程的能力。
我认为位移可能有用:为每个语言环境分配一个数值,但我不太确定如何实现。以前有人遇到过这个挑战吗?此外,我有75个语言环境,所以我不确定这是否会导致位移的问题。
最后,我正在使用SQL Server与Teradata的链接服务器连接(这是我的数据源)。我不认为Teradata支持开箱即用,所以我假设我必须在MSSQL中这样做。
谢谢。
答案 0 :(得分:3)
您可以创建复合数字键,将75个唯一值映射到数字键的最后2位数。您可以使用简单模数100算法或仅使用子字符串解析组件。如果您将超过100个值,请使用3位数字。总数为9位将适合int,10-18将适合bigint。
答案 1 :(得分:0)
将234567-EN_US转换为整数很容易。只需在连接的字符串值上使用CHECKSUM。然而,它不可逆转。
然而,您可以将此CHECKSUM值存储在原始表中,然后使用它从您将要存储整数的任何表中回溯。
另一种解决方案是为每个语言环境分配一个Integer值(如Marc B建议的那样)。调用X.然后将您现有的整数ID(234567)称为Y.您的最终键将是(X * 1,000,000)+ Y.然后您可以反转公式以获取值。当然,如果您现有的整数ID远低于1,000,000,并且您的最终整数可以是BigInt,那么这只会起作用。