我有一个维护组件标识和组件名称的视图。
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。什么是最好的实现这一目标。
我有一个维护组件标识和组件名称的视图。
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。什么是最好的实现这一目标。
如果您向表中添加标识列(如 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
我假设您希望此视图最终指向一个表,例如 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;
我希望这能解决你的问题。