Advertisement
ulivegenov

/* Problem 19. Trigger */

Oct 11th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. /* Problem 19. Trigger */
  2.  
  3. CREATE TRIGGER tr_UserGameItems
  4. ON UserGameItems
  5. INSTEAD OF INSERT
  6. AS
  7. BEGIN
  8. INSERT INTO UserGameItems
  9. SELECT i.Id,
  10. ug.Id
  11. FROM inserted
  12. INNER JOIN UsersGames AS ug
  13. ON UserGameId = ug.Id
  14. inner JOIN Items AS i
  15. ON ItemId = i.Id
  16. WHERE ug.Level >= i.MinLevel
  17. END
  18. GO
  19.  
  20. UPDATE UsersGames
  21. SET Cash += 50000
  22. FROM UsersGames AS ug
  23. INNER JOIN Users AS u
  24. ON ug.UserId = u.Id
  25. INNER JOIN Games AS g
  26. ON ug.GameId = g.Id
  27. WHERE g.Name = 'Bali'
  28. AND u.Username IN ('baleremuda', 'loosenoise', 'inguinalself', 'buildingdeltoid', 'monoxidecos')
  29. GO
  30.  
  31. CREATE PROC usp_BuyItems(@Username VARCHAR(100))
  32. AS
  33. BEGIN
  34. DECLARE @UserId INT = (SELECT Id FROM Users WHERE Username = @Username)
  35. DECLARE @GameId INT = (SELECT Id FROM Games WHERE Name = 'Bali')
  36. DECLARE @UserGameId INT = (SELECT Id FROM UsersGames WHERE UserId = @UserId AND GameId = @GameId)
  37. DECLARE @UserGameLevel INT = (SELECT Level FROM UsersGames WHERE Id = @UserGameId)
  38.  
  39. DECLARE @counter INT = 251
  40.  
  41. WHILE(@counter <= 539)
  42. BEGIN
  43. DECLARE @ItemId INT = @counter
  44. DECLARE @ItemPrice MONEY = (SELECT Price FROM Items WHERE Id = @ItemId)
  45. DECLARE @ItemLevel INT = (SELECT MinLevel FROM Items WHERE Id = @ItemId)
  46. DECLARE @UserGameCash MONEY = (SELECT Cash FROM UsersGames WHERE Id = @UserGameId)
  47.  
  48. IF(@UserGameCash >= @ItemPrice AND @UserGameLevel >= @ItemLevel)
  49. BEGIN
  50. UPDATE UsersGames
  51. SET Cash -= @ItemPrice
  52. WHERE Id = @UserGameId
  53.  
  54. INSERT INTO UserGameItems VALUES
  55. (@ItemId, @UserGameId)
  56. END
  57.  
  58. SET @counter += 1
  59.  
  60. IF(@counter = 300)
  61. BEGIN
  62. SET @counter = 501
  63. END
  64. END
  65. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement