我正在使用Entity Framework和MSSQL ......
我需要在插入记录时插入自定义参考号。格式为YYYY-01
,YYYY-02
等,但新年开始时需要重置序号。
例如2011-01
,2011-02
,2012-01
我很好奇我是应该使用触发器还是用EF管理它?
每年重复顺序编号让我有点困惑......
感谢您的任何建议!
更新
抱歉,无法使Code
标记与标记配合使用
- 变量的
DECLARE @year的 INT 的,
@seqNum的 INT 的;
- 尝试发现,如果[ComplaintCount表已经包含了本年度
SET @year =(SELECT [Count_Year]
FROM [ComplaintCount]
WHERE [Count_Year] = YEAR 的( GETDATE 的()))
- 如果当前年不能在[ComplaintCount]表中找到,需要进行本年度一个新的记录的
如果@year IS NULL
BEGIN
- 获取当前年份,并设置初始序列号,开始新的一年计数
SET @year = YEAR 的( GETDATE 的());
SET @seqNum = 1;
- 插入新的缺省值代入[ComplaintCount]表的
INSERT INTO [ComplaintCount]
(count_year,
count_current)
VALUES(@year,
@seqNum);
END
ELSE
BEGIN
- 我们在[ComplaintCount]表中找到的记录已经本年度
- 获取序列号和由一个增加它的
SET @seqNum =(SELECT [Count_Current]
FROM [ComplaintCount]
WHERE [Count_Year] = @year)+ 1
- 将新值插入到[ComplaintCount]表的
UPDATE [ComplaintCount]
SET [Count_Current] = @seqNum
WHERE [Count_Year] = @year;
END
的 - 它现在可以安全地插入正确的参考号为[投诉]表的
UPDATE
UPDATE [投诉]
SET [Complaint_Reference] = CAST 的(@年AS的 VARCHAR 的)+ ' - ' +的 CAST 的(
@seqNum AS的 VARCHAR 的)
FROM [投诉]
INNER JOIN插入
ON [投诉] [PK_Complaint_Id] =插入。[PK_Complaint_Id]
答案 0 :(得分:1)
我会说一个触发器。创建一个存储年份和当前记录号的两列表,然后使用触发器查找当前年份,将计数列递增1,然后将该计数返回到触发器。将逻辑构建到触发器中,如果新年不存在,则插入新年记录。我知道大多数人都喜欢在可能的情况下避免使用触发器,但这是一个非常合理的触发器使用方式,而不是尝试计算每个插入器上的记录。
每年只有一行,并且当您尝试审核过去一年或回答BI问题时,它的相关计数也可能在将来有用。