Advertisement
aslv

Problem 20 - Massive Shopping - Functions, Triggers and Tran

Oct 17th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 1.32 KB | None | 0 0
  1. DECLARE @CurrentBalanceId INT=
  2.     (SELECT ug.Id
  3.     FROM Users AS u
  4.     INNER JOIN UsersGames AS ug
  5.     ON u.Id=ug.UserId
  6.     INNER JOIN Games AS g
  7.     ON ug.GameId=g.Id
  8.     WHERE u.FirstName='Stamat' AND g.[Name]='Safflower');
  9. DECLARE @FirstLevelItemsPrice MONEY
  10. DECLARE @SecondLevelItemsPrice MONEY
  11. BEGIN TRAN
  12.     SET @FirstLevelItemsPrice = (SELECT SUM([Price])
  13.         FROM [Items]
  14.         WHERE [MinLevel] BETWEEN 11 AND 12)
  15.    
  16.     BEGIN TRY
  17.         UPDATE UsersGames
  18.         SET UsersGames.Cash-=@FirstLevelItemsPrice
  19.         WHERE UsersGames.Id=@CurrentBalanceId
  20.        
  21.         INSERT INTO UserGameItems
  22.         SELECT [Id] AS [ItemId], @CurrentBalanceId AS [UserGameId]
  23.         FROM Items
  24.         WHERE [MinLevel] BETWEEN 11 AND 12
  25.  
  26.         COMMIT
  27.     END TRY
  28.     BEGIN CATCH
  29.         ROLLBACK
  30.     END CATCH
  31. BEGIN TRAN
  32.     SET @SecondLevelItemsPrice = (SELECT SUM([Price])
  33.         FROM [Items]
  34.         WHERE [MinLevel] BETWEEN 19 AND 21)
  35.        
  36.     BEGIN TRY
  37.         UPDATE UsersGames
  38.         SET UsersGames.Cash-=@SecondLevelItemsPrice
  39.         WHERE UsersGames.Id=@CurrentBalanceId
  40.        
  41.         INSERT INTO UserGameItems
  42.         SELECT [Id] AS [ItemId], @CurrentBalanceId AS [UserGameId]
  43.         FROM Items
  44.         WHERE [MinLevel] BETWEEN 19 AND 21
  45.  
  46.         COMMIT
  47.     END TRY
  48.     BEGIN CATCH
  49.         ROLLBACK
  50.     END CATCH
  51. SELECT i.[Name] AS [Item Name]
  52. FROM UserGameItems as ugi
  53. INNER JOIN Items as i
  54. ON ugi.ItemId=i.Id
  55. WHERE ugi.UserGameId=@CurrentBalanceId
  56. ORDER BY i.[Name]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement