我有一个维护组件和组件名的观点。
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。实现这一目标的最佳方式是什么。
答案 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