在哪里/如何创建参考编号

时间:2011-05-11 16:57:25

标签: tsql entity-framework sql-server-2008

我正在使用Entity Framework和MSSQL ......

我需要在插入记录时插入自定义参考号。格式为YYYY-01YYYY-02等,但新年开始时需要重置序号。

例如2011-012011-022012-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]

1 个答案:

答案 0 :(得分:1)

我会说一个触发器。创建一个存储年份和当前记录号的两列表,然后使用触发器查找当前年份,将计数列递增1,然后将该计数返回到触发器。将逻辑构建到触发器中,如果新年不存在,则插入新年记录。我知道大多数人都喜欢在可能的情况下避免使用触发器,但这是一个非常合理的触发器使用方式,而不是尝试计算每个插入器上的记录。

每年只有一行,并且当您尝试审核过去一年或回答BI问题时,它的相关计数也可能在将来有用。