USP_MEMBERSHIPLEVEL_DELETE
Executes the "Membership Level: Delete" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being deleted. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the delete. |
Definition
Copy
CREATE procedure dbo.USP_MEMBERSHIPLEVEL_DELETE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime = getdate();
declare @MEMBERSHIPPROGRAMID uniqueidentifier;
select @MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAMID from dbo.MEMBERSHIPLEVEL where ID = @ID;
begin try
declare @REMAININGLEVELCOUNT int
select @REMAININGLEVELCOUNT = count(*)
from MEMBERSHIPLEVEL
join (
select MEMBERSHIPPROGRAM.ID
from MEMBERSHIPLEVEL
join MEMBERSHIPPROGRAM on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
where MEMBERSHIPLEVEL.ID = @ID
) a on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = a.ID
where MEMBERSHIPLEVEL.ID <> @ID
and MEMBERSHIPLEVEL.ISACTIVE = 1
if (@REMAININGLEVELCOUNT = 0)
begin
raiserror('BBERR_CANNOTDELETELASTLEVEL',13,1)
end
exec USP_MEMBERSHIPLEVEL_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
-- Use identity column to try and resequence the membership levels in case invalid or duplicate sequences were inserted
declare @TEMPMEMBERSHIPLEVELS table (
ID uniqueidentifier,
SEQUENCE int identity(0,1)
);
insert into @TEMPMEMBERSHIPLEVELS
select ID
from dbo.MEMBERSHIPLEVEL
where MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
order by SEQUENCE;
update
dbo.MEMBERSHIPLEVEL
set
MEMBERSHIPLEVEL.SEQUENCE = TEMPMEMBERSHIPLEVELS.SEQUENCE,
MEMBERSHIPLEVEL.CHANGEDBYID = @CHANGEAGENTID,
MEMBERSHIPLEVEL.DATECHANGED = @CURRENTDATE
from
dbo.MEMBERSHIPLEVEL
inner join
@TEMPMEMBERSHIPLEVELS as TEMPMEMBERSHIPLEVELS on TEMPMEMBERSHIPLEVELS.ID = MEMBERSHIPLEVEL.ID
where
MEMBERSHIPLEVEL.SEQUENCE <> TEMPMEMBERSHIPLEVELS.SEQUENCE;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;