USP_GLOBALCHANGE_SPONSORSHIPOPPORTUNITYUNLOCKALL
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@ASOF | datetime | IN | |
@NUMBERADDED | int | INOUT | |
@NUMBEREDITED | int | INOUT | |
@NUMBERDELETED | int | INOUT | |
@TIMEOUTMINUTES | smallint | IN |
Definition
Copy
CREATE procedure dbo.USP_GLOBALCHANGE_SPONSORSHIPOPPORTUNITYUNLOCKALL
(
@CHANGEAGENTID uniqueidentifier = null,
@ASOF as datetime = null,
@NUMBERADDED int = 0 output,
@NUMBEREDITED int = 0 output,
@NUMBERDELETED int = 0 output,
@TIMEOUTMINUTES smallint = 15
)
as
set nocount off;
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate();
set @NUMBERADDED = 0;
set @NUMBEREDITED = 0;
set @NUMBERDELETED = 0;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
-- Clear all orphaned locks, using a timeout of 15 minutes.
-- Ignore locks held by BBNC, which are linked to sales orders.
;with CTE as (
select SO.ID, count(SOIS.SPONSORSHIPOPPORTUNITYID) LOCKCOUNT
from dbo.SPONSORSHIPOPPORTUNITY SO
left join dbo.SALESORDERITEMSPONSORSHIP SOIS on SOIS.SPONSORSHIPOPPORTUNITYID = SO.ID
group by SO.ID
)
update SOL
set LOCKCOUNT = CTE.LOCKCOUNT,
LOCKED = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.SPONSORSHIPOPPORTUNITYLOCK SOL
inner join CTE on CTE.ID = SOL.ID
where (SOL.LOCKCOUNT > CTE.LOCKCOUNT or
(SOL.LOCKED = 1 and CTE.LOCKCOUNT = 0))
and SOL.DATECHANGED < dateadd(minute, -1*@TIMEOUTMINUTES, @CURRENTDATE);
set @NUMBEREDITED = @@ROWCOUNT;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch