首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server使用相同的数字组合获取唯一Id

SQL Server使用相同的数字组合获取唯一Id
EN

Stack Overflow用户
提问于 2017-09-09 01:17:51
回答 3查看 232关注 0票数 0

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

Article

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

该视图将有3列

代码语言:javascript
复制
Id, Value1, Value2

根据Value1Value2生成Id

代码语言:javascript
复制
Id   Value1   Value2
---------------------
??   34        67
??    3       467

Value1Value2的相同组合将始终返回相同的Id,我需要找到一种基于这些列生成这些I的方法

EN

回答 3

Stack Overflow用户

发布于 2017-09-09 03:02:11

使用过程获取特定值对的ID。如果真的存在,你就是个极品。如果不是,则生成并存储它。

用于存储具有唯一ID的所有值对的表

代码语言:javascript
复制
create table  idval1val2 (id int identity, value1 int not null, value2 int not null)
go

获取任何值对的ID的过程

代码语言:javascript
复制
create procedure getID(@value1 int, @value2 int, @id int OUT) as

if exists(select id from idval1val2 where value1=@value1 and value2=@value2)
begin
    select @id=id from idval1val2 where value1=@value1 and value2=@value2
end
 else 
begin
   insert into idval1val2(value1,value2) values(@value1,@value2)
   set @id=SCOPE_IDENTITY()
end
 go

如果值的顺序可以是任意的,则需要稍作更改。

票数 0
EN

Stack Overflow用户

发布于 2017-09-09 03:16:46

使用散列函数

代码语言:javascript
复制
  select  HashBytes ( 'MD5', cast(@value1 as char(20)) ) 
        + HashBytes ( 'MD5', cast(@value2 as char(20)) ) 

这将为您带来每个散列值的串联值(作为var二进制)。这将是唯一的,并且在任何没有存储的系统中都是相同的。

示例:

代码语言:javascript
复制
 select HashBytes ( 'MD5', '134' ) , HashBytes ( 'MD5', '2' ) 
      , HashBytes ( 'MD5', '134' ) + HashBytes ( 'MD5', '2' )

0x02522A2B2726FB0A03BB19F2D8D9524DC81E728D9D4C2F636F067F89CC14862C

0x02522A2B2726FB0A03BB19F2D8D9524D 0xC81E728D9D4C2F636F067F89CC14862C 0x02522A2B2726FB0A03BB19F2D8D9524DC81E728D9D4C2F636F067F89CC14862C

票数 0
EN

Stack Overflow用户

发布于 2017-09-09 03:31:09

或者,您可以创建自己的散列函数。下面这样的代码就可以了:

代码语言:javascript
复制
select @id= cast(@value1 as varchar(20)) +'.'+cast(@value2 as varchar(20))

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

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

代码语言:javascript
复制
select @id= @value1 + @value2/10000.0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46121616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档