USP_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER_ATOMIC
Gets the next available batch number for a batch numbering scheme and increments the sequence.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@BATCHTEMPLATEID | uniqueidentifier | IN | |
@BATCHNUMBER | nvarchar(100) | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER_ATOMIC(
@ID uniqueidentifier,
@BATCHTEMPLATEID uniqueidentifier,
@BATCHNUMBER nvarchar(100) output,
@CHANGEAGENTID uniqueidentifier = null
)
as
set nocount on;
declare @BATCHNUMBER_CHECK nvarchar(100);
declare @IS_UNIQUE bit;
set @IS_UNIQUE = 0;
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin transaction;
exec sp_getapplock @Resource = 'USP_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER_ATOMIC', @LockMode = 'Exclusive';
while @IS_UNIQUE = 0
begin
set @BATCHNUMBER_CHECK = dbo.UFN_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER(@ID);
update
dbo.BATCHNUMBERINGSCHEME
set
ACTUALSEQUENCE = ACTUALSEQUENCE + 1,
DATECHANGED = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @ID;
if not exists (select
top 1 BATCH.ID
from dbo.BATCH
inner join dbo.BATCHTEMPLATE on BATCHTEMPLATE.ID = BATCH.BATCHTEMPLATEID
where BATCHNUMBER = @BATCHNUMBER_CHECK and BATCHNUMBERINGSCHEMEID = @ID)
set @IS_UNIQUE = 1;
end;
set @BATCHNUMBER = @BATCHNUMBER_CHECK;
exec sp_releaseapplock @Resource = 'USP_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER_ATOMIC';
commit transaction;
return 0;