我有一个名为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
任何人都有任何想法可以做到这一点?
答案 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)
在插入时使用替代触发器。
甚至更好:在中心位置解决应用程序逻辑中的问题。