3

我有一个带有 ID 和语言环境的表。可以使用不同的语言环境多次列出相同的 ID:

ID      Locale
123456  EN_US
234567  EN_US
234567  EN_CA
345678  EN_US

我需要为每条记录创建一个数字 ID(整数)形式的唯一标识符,同时保持对原始组件进行逆向工程的能力。

我在想位移可能会起作用:为每个语言环境分配一个数值,但我不太确定如何实现。以前有人遇到过这个挑战吗?另外,我有 75 个语言环境,所以我不确定这是否会成为位移问题。

最后,我使用 SQL Server 与 Teradata 的链接服务器连接(这是我的数据源)。我认为 Teradata 不支持开箱即用的按位,所以我假设我必须在 MSSQL 中进行。

谢谢你。

4

2 回答 2

3

您可以创建一个复合数字键,将您的 75 个唯一值映射到数字键的最后 2 位。您可以使用简单的模数 100 算术或只是一个子字符串来解析为组件。如果您将超过 100 个值,请改用 3 位数字。总共 9 位数字将适合 int 一个 int,10-18 将适合一个 bigint。

于 2013-09-10T17:15:31.853 回答
0

将 234567-EN_US 转换为整数很容易。只需对连接的字符串值使用 CHECKSUM。然而,这将是不可逆的。

但是,您可以将此 CHECKSUM 值存储在原始表中,然后使用它从要存储整数的任何表中回溯。

另一种解决方案是为每个语言环境分配一个整数值(如 Marc B 建议的那样)。将其称为 X。然后将现有整数 ID (234567) 称为 Y。您的最终键将是 (X * 1,000,000) + Y。然后您可以反转公式以取回值。当然,这只有在您现有的整数 ID 远低于 1,000,000 并且您的最终整数可以是 BigInt 时才有效。

于 2013-09-10T17:25:29.520 回答