/* -------------------------------------------------------------------------
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