, , , , , . , , @PatientIdToGiveBed, , , , " " . , , "In Patient" , .
REPEATABLE READ, , READ COMMITTED, . , a READ LOCK .
SSMS .
DECLARE @Bed TABLE (
b_ID INT,
Status_Avai_Occ VARCHAR(20)
)
DECLARE @Patient_Record TABLE (
Id INT,
Name VARCHAR(10),
b_ID INT
)
INSERT INTO @Bed VALUES (1, 'Available')
INSERT INTO @Bed VALUES (2, 'Available')
INSERT INTO @Bed VALUES (3, 'Available')
INSERT INTO @Patient_Record VALUES (1, 'Adam', NULL)
INSERT INTO @Patient_Record VALUES (2, 'Ben', NULL)
INSERT INTO @Patient_Record VALUES (3, 'Charles', NULL)
DECLARE @PatientIdToGiveBed INT = 1
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION
DECLARE @Available_BID INT
SELECT TOP 1 @Available_BID = b_ID FROM @BED WHERE Status_Avai_Occ = 'Available' ORDER BY b_ID
IF @Available_BID IS NULL
BEGIN
Print 'No Beds Available'
COMMIT
RETURN
END
UPDATE @Patient_Record SET b_ID = @Available_BID WHERE Id = @PatientIdToGiveBed
UPDATE @Bed SET Status_Avai_Occ = 'Occupied' WHERE b_ID = @Available_BID
COMMIT
SELECT * FROM @Patient_Record
SELECT * FROM @Bed