Одна возможность:
Создать таблицу счетчиков:
create table Counter (
Id int identify(1,1),
Name varchar(64)
Count1 int
)
Имя - это уникальный идентификатор последовательности, а в вашем случае имя будет CustomerName-Month-Year
, т.е. со строкой в этой таблице для каждой комбинации Клиент / Год / Месяц.
Затем напишите хранимую процедуру, аналогичную следующей, чтобы назначить новый порядковый номер:
CREATE PROCEDURE [dbo].[Counter_Next]
(
@Name varchar(64)
, @Value int out -- Value to be used
)
AS
BEGIN
set nocount on;
declare @Temp int;
begin tran
-- Ensure we have an exclusive lock before changing variables
select top 1 1 from dbo.Counter with (tablockx);
set @Value = null; -- if a value is passed in it stuffs us up, so null it
-- Attempt an update and assignment in a single statement
update dbo.[Counter] set
@Value = Count1 = Count1 + 1
where [Name] = @Name;
if @@rowcount = 0 begin
set @Value = 10001; -- Some starting value
-- Create a new record if none exists
insert into dbo.[Counter] ([Name], Count1)
select @Name, @Value;
end
commit tran
return 0;
END