SQL Server获得具有相同数字组合的唯一ID

时间:2017-09-08 17:17:51

标签: sql-server

我需要创建一个类似于这篇文章的视图:

Article

但我需要为相同的项目组合创建相同的ID,例如,如果我有2列值34,67,这个组合将给我总是相同的id,顺便说一下,id必须是唯一的,如果我有另一个组合,如3,467,应该是另一个id。

视图将有3列

Id, Value1, Value2

Id将根据Value1Value2

生成
Id   Value1   Value2
---------------------
??   34        67
??    3       467

Value1Value2的相同组合将始终返回相同的Id,我需要找到根据这些列生成这些ID的方法

3 个答案:

答案 0 :(得分:0)

使用过程获取特定值对的ID。如果存在,你得到。如果没有,则生成并存储它。

用于存储具有唯一ID

的所有值对的表
CurrentDb.Execute "UPDATE loggingX " & _
    " SET stdid=" & Me.txtID & _
    ", stdname='" & Me.txtName & "'" & _
    ", gender='" & Me.cboGender & "'" & _
    ", phone='" & Me.txtPhone & "'" & _
    ", address='" & Me.txtAddress & "'" & _
    ", WHid='" & Me.txtWHid & "'" & _
    " WHERE stdid=" & Me.txtID.Tag
    " AND WHid=" & Me.txtWHid

获取任何价值对的ID的程序

create table  idval1val2 (id int identity, value1 int not null, value2 int not null)
go

如果值可以按任何顺序排列,则需要进行小的更改。

答案 1 :(得分:0)

使用哈希函数

  select  HashBytes ( 'MD5', cast(@value1 as char(20)) ) 
        + HashBytes ( 'MD5', cast(@value2 as char(20)) ) 

这将为您带来每个散列值的连接值(作为var binary)。在没有存储空间的任何系统中,这将是唯一且始终相同的。

示例:

 select HashBytes ( 'MD5', '134' ) , HashBytes ( 'MD5', '2' ) 
      , HashBytes ( 'MD5', '134' ) + HashBytes ( 'MD5', '2' )
  

0x02522A2B2726FB0A03BB19F2D8D9524D 0xC81E728D9D4C2F636F067F89CC14862C 0x02522A2B2726FB0A03BB19F2D8D9524DC81E728D9D4C2F636F067F89CC14862C

答案 2 :(得分:0)

或者您可以创建自己的哈希函数。这样的事情会做:

select @id= cast(@value1 as varchar(20)) +'.'+cast(@value2 as varchar(20))

这始终是唯一的,并带来相同的ID,在本例中为varchar(41)。

你可以做一个DECIMAL(4,4),不确定你的域名是什么

select @id= @value1 + @value2/10000.0