我需要创建一个视图,类似于这篇文章:
但是我需要为相同的项目组合创建相同的id,例如,如果我有2列,值为34,67,这个组合将总是给我相同的id,顺便说一句,id必须是唯一的,如果我有另一个组合,比如3,467,应该是另一个id。
该视图将有3列
Id, Value1, Value2根据Value1和Value2生成Id
Id Value1 Value2
---------------------
?? 34 67
?? 3 467Value1和Value2的相同组合将始终返回相同的Id,我需要找到一种基于这些列生成这些I的方法
发布于 2017-09-09 03:02:11
使用过程获取特定值对的ID。如果真的存在,你就是个极品。如果不是,则生成并存储它。
用于存储具有唯一ID的所有值对的表
create table idval1val2 (id int identity, value1 int not null, value2 int not null)
go获取任何值对的ID的过程
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如果值的顺序可以是任意的,则需要稍作更改。
发布于 2017-09-09 03:16:46
使用散列函数
select HashBytes ( 'MD5', cast(@value1 as char(20)) )
+ HashBytes ( 'MD5', cast(@value2 as char(20)) ) 这将为您带来每个散列值的串联值(作为var二进制)。这将是唯一的,并且在任何没有存储的系统中都是相同的。
示例:
select HashBytes ( 'MD5', '134' ) , HashBytes ( 'MD5', '2' )
, HashBytes ( 'MD5', '134' ) + HashBytes ( 'MD5', '2' )0x02522A2B2726FB0A03BB19F2D8D9524DC81E728D9D4C2F636F067F89CC14862C
0x02522A2B2726FB0A03BB19F2D8D9524D 0xC81E728D9D4C2F636F067F89CC14862C 0x02522A2B2726FB0A03BB19F2D8D9524DC81E728D9D4C2F636F067F89CC14862C
发布于 2017-09-09 03:31:09
或者,您可以创建自己的散列函数。下面这样的代码就可以了:
select @id= cast(@value1 as varchar(20)) +'.'+cast(@value2 as varchar(20))这始终是唯一的,并带来相同的ID,在本例中为varchar(41)。
你可以做一个小数(4,4),不确定你的域名是什么
select @id= @value1 + @value2/10000.0等
https://stackoverflow.com/questions/46121616
复制相似问题