从sql中的字符串生成静态唯一编号

时间:2013-11-13 12:16:18

标签: sql sql-server tsql

我有一个维护组件和组件名的观点。

CREATE VIEW [dbo].[vDimNIS]
AS
SELECT 
    IndicatorID as TINYINT
    IndicatorName as varchar(20)
FROM (
VALUES
(1,ant),
(2,bat),
(3,cat)
)AS Nis (IndicatorID , IndicatorName)

我想为此表提供唯一的静态IndicatorID。实现这一目标的最佳方式是什么。

2 个答案:

答案 0 :(得分:0)

我假设您希望此视图最终指向一个表格,例如DimNis,你的所有条目都有一个indicatorid。我知道实现这一目标的最简单方法是使用身份。这样,每次在表中插入新的指示符时,都会发出一个新的指示符:

create table DimNis
( indicatorid tinyint identity(1,1) not null
, indicatorname varchar(20));

insert into DimNis
( indicatorname )
values 
('ant');
insert into DimNis
( indicatorname )
values 
('bat');
insert into DimNis
( indicatorname )
values 
('cat');

select * from DimNis;

我希望这能解决你的问题。

答案 1 :(得分:0)

如果您向表中添加标识列(由Brett建议),则会自动生成ID。 如果你想动态生成它,你可以使用ROW_NUMBER()来给你增加一个像identity这样的数字,或者你可以使用散列函数CHECKSUM来计算一个整数但可能有碰撞。

两个ID的代码:

if object_id('vdimnis') is not null
    drop view vDimNis
    go
CREATE VIEW [dbo].[vDimNIS]
AS
SELECT 
    row_number() over (order by IndicatorName) as IndicatorId,
    checksum(IndicatorName) as ChecksumId,
    cast( IndicatorName as varchar(20) ) as IndicatorName
FROM ( VALUES
        ('ant'),
        ('bat'),
        ('cat')
    ) AS Nis ( IndicatorName)
go
select * from vDimNis