我有一个问题,即使用两个数据元素和一个自动递增的值为表创建主键。
我有一张包含
的表
数据集 - 三个字母的缩写和
DEPOSITDATE
我想为这个表创建一个主键,它将dataset和depositDate与一个自动递增的值组合在一起。
我可以使用一个不断增大的值来创建此列,但我想要的是每天都要重置它。
例如,在2013年11月8日的ACA中,当天的第一个插入标识符为:
ACA-110813-01
第二个:
ACA-110813-02
等等
然后,2013年11月9日的第一次插入将是:
ACA0-110913-01
这是否可以在表创建中或通过任何存储过程或触发器实现?
我正在使用SQLServer 2008
提前谢谢。
答案 0 :(得分:0)
我找到的解决方案是使用存储过程将数据插入到我的表中。
我在目标表(ledgers.deposits)中创建了一个名为depositNum的列,这是我将要递增的值。
CREATE TABLE [Ledgers].[Deposits]
(
[Dataset] [nvarchar](3),
[DepositDate] [date],
[Payer] [nvarchar](100),
[CheckNum] [nvarchar](100),
[CheckAmt] [decimal](18, 2),
[depositNum] [bigint],
[depositId] AS ((((((CONVERT([nvarchar],[Dataset],0)+'-')+ CONVERT([nvarchar],datepart(month,[DepositDate]),0))+CONVERT([nvarchar],datepart(day,[DepositDate]),0))+CONVERT([nvarchar],datepart(year,[DepositDate]),0))+'-')+CONVERT([nvarchar],[depositNum],0))))
我使用存储过程插入数据,该存储过程将根据数据集和日期递增depositNum。然后将该值连接到我设置为主键的depositId列。
以下是插入数据并增加depositNum的存储过程。
CREATE PROCEDURE [Ledgers].[insertDeposit]
@dataset nvarchar(3),
@depositDate date,
@payer nvarchar(100),
@checkNum nvarchar(100),
@depositAmt decimal(18,2)
AS
insert into Ledgers.Deposits
values(
@dataset,
@depositDate,
@payer,
@checkNum,
@depositAmt,
(
select ISNULL(max(depositNum+1), 1)
from Ledgers.Deposits
where Dataset=@dataset and DepositDate=@depositDate
))
希望这是有道理的。