从共享的基础生成一系列递增的数字

时间:2012-04-30 12:58:35

标签: sql sql-server-2008 cursor increment

我有一个名为SharedNumber的表,它只有一个字段 - 一个名为LastNumber的整数,它只能有一个条目。

大约有40或50个完全独立的Access数据库使用此LastNumber条目作为公共参考点。它本质上用于为不能自己生成它们的系统手动生成唯一主键。它是丑陋和混乱的,我正逐步逐渐断绝它们,但在此期间,我需要在SQL Server中构建一个引用同一条目的进程。

我正在处理以下问题:

1

共享号码表:

create table SharedNumber
( 
    [LastNumber] int not null
) ON [PRIMARY]


Insert into SharedNumber
values
(234) --This is the most recent shared number

2。

输入数据表(InputTable),它将持续接收新条目,并且需要通过递增ContractID手动生成新的LastNumber字段值。对于简单,假设此表在Name上唯一定义。

create table InputTable
(

    [ContractID] int NULL,
    [Name] varchar(50) not null
 ) ON [PRIMARY]


Insert into InputTable
values
(101,'ABC'),
(102,'DEF'),
(NULL,'GHI'),
(NULL,'JKL'),
(NULL,'MNO')

条目'GHI','JKL'和'MNO'需要ContractID个值,因此我想根据LastNumber逐步为它们创建新数字,然后更新LastNumber到最后一个生成的。我想要的最终结果是:

ContractID    Name
101           ABC
102           DEF
235           GHI
236           JKL
237           MNO


LastNumber
237

任何人都有任何想法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

一种选择是直接在合同表的DDL中执行此操作。这使用两列和一个计算列:

create table whatever (
    BuiltInContractId int identity(1000000,1) not null, -- the 1000000 is just to set a range for contract ids
    OverrideContractId int, -- what a user inputs,
    ContractId as coalesce(OverrideContractId, BuiltInContractId),
    . . .
)

答案 1 :(得分:0)

在插入时使用替代触发器。

甚至更好:在中心位置解决应用程序逻辑中的问题。

相关问题