我需要为使用SQLServer的两个表(两个集)的交叉连接(交叉乘积)产生的任何单行指定唯一标识符。基本上,我需要将结果集任何一行的列值“压缩”到一个唯一标识符中。我在想一个guid方法或类似的方法,但我不确定它是否能达到目的。什么方法对sqlsserver有效?此机制的目的是评估不同集合(表)的成员(行)的所有可能组合,并为以后使用所需的任何组合指定唯一名称。
例子
Input Tables A and B
+----+----+ +----+----+
| Table A | | Table B |
+----+----+ +----+----+
| A1 | A2 | | B1 | B2 |
+----+----+ +----+----+
| 1 | 2 | | a | b |
| 3 | 4 | | c | d |
+----+----+ +----+----+
结果集表a x b+唯一标识符
+----+----+----+----+ +-----+
| A1 | A2 | B1 | B2 | | UID |
+----+----+----+----+ +-----+
| 1 | 2 | a | b | | 001 |
| 1 | 2 | c | d | | 002 |
| 3 | 4 | a | b | | 003 |
| 3 | 4 | c | d | | 004 |
+----+----+----+----+ +-----+
2条答案
按热度按时间yqyhoc1h1#
一种选择是使用
row_number()
:vaqhlq812#
如果需要一个随时间变化而一致的唯一标识符,请将表中的两个标识符组合起来:
这是假设
a1
以及b1
是主键。如果没有主键,请添加一个。这将促进你想做的事情。
您可以冒险使用哈希函数。像这样:
这会有冲突的风险(哈希值是相同的,即使基础值不相同),但这是相当低的。这是一个使用主键的参数。