触发发票号码

时间:2011-12-02 17:35:46

标签: sql-server

我正在asp.net MVC中开发一个应该生成发票的网站。

在阅读了有关发票编号生成的一些内容后,我的理解是使用触发器或存储过程,以确保正确生成数字而不会跳过或重复数字,因为会同时插入发票。

根据我的理解,最好的方法是在我的发票表的后插入中创建一个触发器,在单个事务中完成工作。

所以我想出了这个,看起来效果很好(本周末更多测试)

CREATE TRIGGER Invoices_SetInvoiceNum ON Invoices AFTER INSERT
AS 
declare @next int
Begin tran
set nocount on
update counters set @next=InvoiceNum=InvoiceNum+1
update Invoices set InvoiceNum = @next from inserted i join Invoices p on  p.Id = i.Id
IF @@ERROR = 0
COMMIT TRAN
ELSE
ROLLBACK TRAN
  1. 这是一个好方法还是有更好的方法可以确保数字永远不会重复或跳过?
  2. 使用表/记录锁更安全吗?如果是,你可以建议整合到我的触发器吗?
  3. 提前感谢您对此主题的任何见解。

1 个答案:

答案 0 :(得分:2)

更好的方法是将发票栏设为Identity column并让其自行递增。

CREATE TABLE Invoices
(
 InvoiceNum int IDENTITY(1,1),
 AccountNum int,
 OtherStuff varchar(30)
);

请参阅this runnable example