0

我有一个维护组件标识和组件名称的视图。

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。什么是最好的实现这一目标。

4

2 回答 2

0

如果您向表中添加标识列(如 Brett 建议的那样),则 ID 将自动生成。如果你想动态生成它,你可以使用 ROW_NUMBER() 来给你一个递增的数字,比如身份,或者你可以使用哈希函数 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
于 2013-11-13T17:24:14.577 回答
0

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

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;

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

于 2013-11-13T13:38:27.137 回答