• Thank you, both for your help. I think perhaps I was trying to do too much for my first attempt at this!

    Here is how I've changed the code and it now works:

    SP1

    ALTER PROCEDURE [dbo].[usp_Permissions_Update_Denied_UserPermissions]

    @ColleagueID int,

    @PermissionID int

    AS

    BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    SET NOCOUNT ON;

    BEGIN TRANSACTION

    Declare @RetVal int

    --if the permission exists in the permissions table (means its been granted)

    IF EXISTS(select int_ID from dbo.tbl_Permissions_UserPermissions where int_ColleagueID = @ColleagueID and int_PermissionID = @PermissionID )

    Declare @oldpermStatus int, @Reason int

    --get the current status of the permission to be denied

    Set @oldpermStatus = (select int_PermissionsStatus from dbo.tbl_Permissions_UserPermissions where int_ColleagueID = @ColleagueID and int_PermissionID = @PermissionID)

    -- if the permstatus is 0 (means requested) then set the deny reason to 1 which is refused by admin

    If (@oldpermStatus = 0)

    Set @Reason = 1

    else

    -- set the deny reason to 3 which is request removal by authoriser

    Set @Reason = 3

    -- set the denied permmision to a status of 6 (which is ready to be deleted)

    begin

    Update dbo.tbl_Permissions_UserPermissions

    Set int_PermissionsStatus = 6

    where int_ColleagueID = @ColleagueID and int_PermissionID = @PermissionID

    IF @@ERROR <> 0 GOTO ErrBlock

    end

    -- find the ID of the permission and check it has a status of 6. if it does then move it to the denied table

    IF exists(select int_ID from dbo.tbl_Permissions_UserPermissions where int_ColleagueID = @ColleagueID and int_PermissionsStatus = 6)

    Exec @RetVal = dbo.usp_Permissions_Admin_Move_Denied_UserPermissions @ColleagueID, @Reason

    IF @RetVal <> 0 GOTO ErrBlock

    COMMIT TRANSACTION

    Return

    ErrBlock:

    ROLLBACK TRANSACTION

    Return

    End

    SP2

    ALTER PROCEDURE [dbo].[usp_Permissions_Admin_Move_Denied_UserPermissions]

    -- Add the parameters for the stored procedure here

    @ColleagueID int,

    @Reason int

    AS

    BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    SET NOCOUNT ON;

    -- Insert statements for procedure here

    Declare @RetVal int, @interror int

    Set @interror = 0

    Insert into dbo.tbl_Permissions_UserPermissionsDenied (int_ColleagueID,int_PermissionID,int_DenyStatus,dte_DeniedOn)

    values (@ColleagueID,(Select int_PermissionID from dbo.tbl_Permissions_UserPermissions where int_ColleagueID = @ColleagueID and int_PermissionsStatus in (5)),@reason,getdate())

    IF (@@ERROR <> 0) BEGIN

    Set @interror = 1

    END

    If(@interror = 0) BEGIN

    Delete from dbo.tbl_Permissions_UserPermissions where int_ColleagueID = @ColleagueID and int_PermissionsStatus in (6)

    END

    If (@interror = 0)

    RETURN 0

    else

    RETURN 1

    End

    I'm sure there is a much nicer way and a better way of doing it but I don't know it!! 😛