这是一个数据库设计方案,其中有几个带有模式的表:
TABLEx (Id varchar(20), BackupTime datetimeoffset, Name varchar(50), Modstamp datetimeoffset)
围绕数据库架构构建一个应用程序,该数据库架构(Id,BackupTime)是一个组合键。每次在某个时间点使用值检索数据
Id, Name, Modstamp
1, TestAccount, 2018-09-17T19:54:55.000Z
2, TestAccount1, 2018-09-17T19:54:55.000Z
3, DummyAccount2, 2018-09-17T20:58:51.000Z
插入并将BackupTime值作为当前时间。假定ID在检索时是唯一的。
当我遇到特定数据源的数据看起来像这样的场景时,这被证明是错误的:
Id, Name, ReferenceValue, Modstamp
1, Problem1, Reference1, 2018-09-17T19:54:55.000Z
1, Problem2, Reference1, 2018-09-17T19:54:55.000Z
1, Problem1, Reference2, 2018-09-17T20:58:51.000Z
及其外观,数据基于[Name,ReferenceValue]的复合键。由于这种异常,我不希望更改应用程序。该数据基于其他操作的Id和BackupTime字段。我想基于复合键[Name,ReferenceValue]生成一个序列。有没有一种方法可以针对这种特定情况生成varchar(20)的自动序列?这将是一种生成适合varchar(20)的哈希的方法。
答案 0 :(得分:0)
我不知道这是否适用于您的情况,但是当我过去不得不这样做以获取其他列组合的唯一键时,我已经这样做了:
1)创建一个包含唯一组合的表:
create table UniqueNameRef(UNameRef int identity not null primary key, Name varchar(20), Ref vrchar(20))
2)将任何新的唯一组合插入该表,在此示例中,数据为
insert UniqueNameRef(Name,Ref)
select distinct Name, ReferenceValue
from TABLEx
where not exists(select * from UniqueNameRef where UniqueNameRef.Name=TABLEx.Name and UniqueNameRef.Ref=TABLEx.ReferenceValue)
3)从该表中查找,以获取组合的唯一UNameRef。
select Name, ReferenceValue, UNameRef
from TABLEx
join UniqueNameRef on UniqueNameRef.Name=TABLEx.Name and UniqueNameRef.Ref=TABLEx.ReferenceValue