Advertisement
Aliendreamer

switch room

Jun 24th, 2018
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.18 KB | None | 0 0
  1. --my code
  2. CREATE PROCEDURE  usp_SwitchRoom(@TripId INT,@TargetRoomId INT)
  3. AS
  4.     BEGIN
  5.    
  6.     DECLARE @InitialHotel INT= (SELECT h.Id FROM Hotels AS h
  7.                             JOIN Rooms AS r ON h.Id=r.HotelId
  8.                             JOIN Trips AS t ON t.RoomId=r.Id
  9.                             WHERE t.Id=@TripId)
  10. --ako se mahne trips join  в @newhotel  минава с 7/7...
  11.     DECLARE @NewHotel INT=(SELECT h.Id FROM Hotels AS h
  12.                             JOIN Rooms AS r ON h.Id=r.HotelId
  13.                             JOIN Trips AS t ON t.RoomId=r.Id
  14.                             WHERE  r.Id=@TargetRoomId)
  15.     DECLARE @NewBeds INT=(SELECT r.Beds FROM Rooms AS r        
  16.                                 WHERE r.Id=@TargetRoomId)
  17.    
  18.     DECLARE @NumPeople INT=(SELECT COUNT(act.AccountId) FROM Trips AS t
  19.                                 JOIN AccountsTrips AS act ON t.Id=act.TripId
  20.                                 WHERE t.Id=@TripId)
  21.  
  22.     IF (@InitialHotel<>@NewHotel)
  23.  
  24.     RAISERROR('Target room is in another hotel',16,1)
  25.    
  26.    
  27.     IF(@NumPeople>@NewBeds)
  28.         RAISERROR('Not enough beds in target room!',16,1)
  29.    
  30.          
  31.       UPDATE Trips
  32.       SET RoomId=@TargetRoomId
  33.       WHERE Id=@TripId
  34. END
  35. GO
  36. -- authors code
  37. CREATE OR ALTER PROC usp_SwitchRoom(@TripId INT, @TargetRoomId INT)
  38. AS
  39.   BEGIN
  40.     DECLARE @SourceHotelId INT = (SELECT H.Id
  41.                                   FROM Hotels H
  42.                                     JOIN Rooms R ON H.Id = R.HotelId
  43.                                     JOIN Trips T ON R.Id = T.RoomId
  44.                                   WHERE T.Id = @TripId)
  45.  
  46.     DECLARE @TargetHotelId INT = (SELECT H.Id
  47.                                   FROM Hotels H
  48.                                     JOIN Rooms R ON H.Id = R.HotelId
  49.                                   WHERE R.Id = @TargetRoomId)
  50.  
  51.     IF (@SourceHotelId <> @TargetHotelId)
  52.       THROW 50013, 'Target room is in another hotel!', 1
  53.  
  54.     DECLARE @PeopleCount INT = (SELECT COUNT(*)
  55.                                 FROM AccountsTrips
  56.                                 WHERE TripId = @TripId)
  57.  
  58.     DECLARE @TargetRoomBeds INT = (SELECT Beds
  59.                                    FROM Rooms
  60.                                    WHERE Id = @TargetRoomId)
  61.  
  62.     IF (@PeopleCount > @TargetRoomBeds)
  63.       THROW 50013, 'Not enough beds in target room!', 1
  64.  
  65.     UPDATE Trips
  66.     SET RoomId = @TargetRoomId
  67.     WHERE Id = @TripId
  68.   END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement