Tôi ước rằng SQL Server có tính năng này. Nó sẽ làm cho rất nhiều thứ dễ dàng hơn.
Đây là cách tôi đã giải quyết vấn đề này.
Tạo bảng có tên là tblIdentities. Trong bảng này, đặt một hàng với giá trị tối thiểu và tối đa của bạn và tần suất số Sequence sẽ được đặt lại. Cũng đặt tên của một bảng mới (gọi nó là tblMySeqNum). Làm điều này làm cho việc thêm các trình tạo số Sequence Number sau này khá dễ dàng.
tblMySeqNum có hai cột. ID (là một định danh int) và InsertDate (là một cột thời gian ngày với một giá trị mặc định của GetDate()).
Khi bạn cần số seq mới, hãy gọi một sproc chèn vào bảng này và sử dụng SCOPE_IDENTITY() để tạo danh tính. Hãy chắc chắn rằng bạn đã không vượt quá tối đa trong tblIdentities. Nếu bạn có sau đó trả lại một lỗi. Nếu không trả lại số thứ tự của bạn.
Bây giờ, để đặt lại và dọn dẹp. Có một công việc chạy thường xuyên khi cần thiết để kiểm tra tất cả các bảng được liệt kê trong tblIdentites (chỉ cần một cho bây giờ) để xem nếu họ cần phải được đặt lại. Nếu họ đã nhấn giá trị đặt lại hoặc thời gian, sau đó gọi DBCC IDENT RESEED trên tên của bảng được liệt kê trong hàng (tblMySeqNum trong ví dụ này). Đây cũng là thời điểm tốt để xóa các hàng thừa mà bạn không thực sự cần trong bảng đó.
KHÔNG làm sạch hoặc chèn sẵn trong sproc của bạn nhận dạng danh tính. Nếu bạn làm như vậy thì trình tạo số thứ tự của bạn sẽ không mở rộng tốt.
Như tôi đã nói, nó sẽ làm cho rất nhiều điều dễ dàng hơn của tính năng này là trong SQL Server, nhưng tôi đã thấy rằng công việc này xung quanh các chức năng khá tốt.
Vaccano
Tôi cần tương đương chính xác và việc sử dụng quy trình cũng là ý tưởng đầu tiên. Tôi đã tự hỏi nếu có một giải pháp 'tự nhiên' hơn cho điều này. – Raymond
Bạn đã hết may mắn ở đây rồi. – Dheer
Có vẻ như SQL Server 2012 đã giới thiệu các đối tượng SEQUENCE trên mỗi http://stackoverflow.com/questions/282943/how-would-you-implement-sequences-in-microsoft-sql-server và http://msdn.microsoft.com/ vi/us/library/ff878091.aspx – Loudenvier