/* ------------------------------------------------------------------------- Jade Cheng ICS 321 Assignment 3 December 12, 2008 PART 2.1 Create Insert, Update and delete stored procedures, with required parameters for the following tables: - PERSON - FULL_TIME - PART_TIME - BADGE - PERSON_SKILL ------------------------------------------------------------------------- */ USE DB9975 GO -- NOTE: The Insert and Update scripts are implemented in parts 2.2 and 3.1. CREATE PROCEDURE DeletePersonInstance(@Id INT) AS -- Lock the database in here. Use the most restrictive lock because speed -- is not an issue. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION -- Verify the person exists. DECLARE @TempPersonTable TABLE ( one INT ) INSERT INTO @TempPersonTable SELECT TOP 1 1 FROM PERSON WHERE Id = @Id; IF @@ROWCOUNT <> 1 BEGIN ROLLBACK TRANSACTION RAISERROR('Person does not exist.', 16, -1, @Id) RETURN 50000 END -- Verify the person has not issued anyone a badge. If the person has, -- then deleting this person would result in an inconsistent database: -- BADGE.IssuingPerson would link to a non-existent PERSON.Id. SELECT TOP 1 1 FROM BADGE WHERE IssuingPerson = @Id; IF @@ROWCOUNT <> 0 BEGIN ROLLBACK TRANSACTION RAISERROR('Cannot delete badge issuers.', 16, -1, @Id) RETURN 50000 END DELETE FROM FULL_TIME WHERE Id = @Id; DELETE FROM PART_TIME WHERE Id = @Id; DELETE FROM PERSON_DESIGNATE WHERE PersonId = @Id; DELETE FROM PERSON_PROFILE WHERE PersonId = @Id; DELETE FROM PERSON_SKILL WHERE PersonId = @Id; DELETE FROM PROJECT_ASSIGNMENT WHERE PersonId = @Id; DECLARE @BadgeId INT SELECT @BadgeId = Badge FROM PERSON WHERE Id = @Id; DELETE FROM PERSON WHERE Id = @Id; DELETE FROM BADGE WHERE Id = @BadgeId; COMMIT TRANSACTION GO