Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.76 KB | None | 0 0
  1. CREATE PROCEDURE dbo.EnrollStudent ( @CourseID AS INTEGER,
  2. @StudentID AS VARCHAR(20) ) AS
  3. BEGIN
  4. DECLARE @StatusID INTEGER
  5. DECLARE @Status VARCHAR(50)
  6. DECLARE @CurrentSeats INTEGER
  7. DECLARE @ErrorCode INTEGER
  8. SET @StatusID=0
  9.  
  10.  
  11.  
  12. IF EXISTS (SELECT 1
  13. FROM dbo.CourseEnrollment
  14. WHERE dbo.CourseEnrollment.CourseId=@CourseID AND dbo.CourseEnrollment.StudentId=@StudentID )
  15. BEGIN
  16.  
  17. BEGIN TRAN Tr1
  18. SET @StatusID = 1
  19. SELECT @ErrorCode=@@ERROR
  20. IF (@ErrorCode<>0) GOTO OTHERPROBLEM
  21. ELSE
  22. COMMIT TRAN Tr1
  23.  
  24. END
  25.  
  26.  
  27. IF EXISTS ( SELECT 1
  28. FROM dbo.CourseEnrollment
  29. FULL OUTER JOIN dbo.Courses
  30. ON dbo.Courses.CourseId=@CourseID
  31. WHERE dbo.CourseEnrollment.StudentId<>@StudentID AND dbo.Courses.Faculty IS NULL )
  32. BEGIN
  33. BEGIN TRAN Tr2
  34. SET @StatusID=2
  35. SELECT @ErrorCode=@@ERROR
  36. IF (@ErrorCode<>0) GOTO OTHERPROBLEM2
  37. ELSE
  38. COMMIT TRAN Tr2
  39.  
  40. END
  41.  
  42.  
  43.  
  44. IF @StatusID=0
  45. BEGIN
  46. IF EXISTS ( SELECT 1
  47. FROM dbo.Courses
  48. WHERE dbo.Courses.CourseId=@CourseID AND dbo.Courses.Faculty IS NOT NULL )
  49.  
  50. BEGIN
  51.  
  52.  
  53. BEGIN TRAN Tr3
  54.  
  55. SET @StatusID=3
  56.  
  57.  
  58. BEGIN TRAN InsertingValues
  59. INSERT INTO dbo.CourseEnrollment (dbo.CourseEnrollment.StudentId,dbo.CourseEnrollment.CourseId)
  60. VALUES (@StudentID,@CourseID);
  61.  
  62. SELECT @ErrorCode=@@ERROR
  63. IF (@ErrorCode<>0) GOTO InsertProblem
  64. ELSE
  65. COMMIT TRAN InsertingValues
  66.  
  67.  
  68.  
  69.  
  70. BEGIN TRAN UpdateCourses
  71. UPDATE dbo.Courses
  72. SET OpenSeats = OpenSeats-1
  73. WHERE dbo.Courses.CourseId = @CourseID
  74.  
  75. SELECT @ErrorCode=@@ERROR
  76. IF (@ErrorCode<>0) GOTO UpdateProblem
  77. ELSE
  78. COMMIT TRAN UpdateCourses
  79.  
  80.  
  81.  
  82.  
  83. SELECT @CurrentSeats=OpenSeats
  84. FROM dbo.Courses
  85. WHERE dbo.Courses.CourseId = @CourseID
  86.  
  87. IF (@CurrentSeats<0) GOTO PROBLEM
  88. ELSE
  89. COMMIT TRAN Tr3
  90.  
  91.  
  92. END
  93.  
  94. END
  95.  
  96.  
  97.  
  98. OTHERPROBLEM:
  99. BEGIN
  100. PRINT 'Unable to set status'
  101. ROLLBACK TRAN
  102. END
  103.  
  104.  
  105. OTHERPROBLEM2:
  106. BEGIN
  107. PRINT 'Unable to set status'
  108. ROLLBACK TRAN
  109. END
  110.  
  111.  
  112. UpdateProblem:
  113. BEGIN
  114. PRINT 'Not able to update values'
  115. ROLLBACK TRAN InsertingValues
  116. END
  117.  
  118.  
  119.  
  120. InsertProblem:
  121. BEGIN
  122. PRINT 'Not able to insert'
  123. ROLLBACK TRAN InsertingValues
  124. END
  125.  
  126.  
  127.  
  128. PROBLEM:
  129. BEGIN
  130. PRINT 'Seats Full!'
  131. ROLLBACK TRAN
  132. END
  133.  
  134.  
  135.  
  136.  
  137. IF @StatusID = 1
  138. BEGIN
  139. SET @Status = 'The Student is already enrolled'
  140. END;
  141.  
  142. ELSE IF @StatusID = 2
  143. BEGIN
  144. SET @Status = 'Cannot enroll until faculty is selected'
  145. END
  146.  
  147. ELSE IF @StatusID = 3
  148. BEGIN
  149. SET @Status = 'Student Enrolled'
  150. END
  151.  
  152. SELECT @Status
  153.  
  154. END;
  155.  
  156. (1 row(s) affected)
  157.  
  158. (1 row(s) affected)
  159. Unable to set status
  160. Msg 3903, Level 16, State 1, Procedure EnrollStudent, Line 101
  161. The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
  162. Unable to set status
  163. Msg 3903, Level 16, State 1, Procedure EnrollStudent, Line 108
  164. The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
  165. Not able to update values
  166. Msg 3903, Level 16, State 1, Procedure EnrollStudent, Line 115
  167. The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
  168. Not able to insert
  169. Msg 3903, Level 16, State 1, Procedure EnrollStudent, Line 123
  170. The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
  171. Seats Full!
  172. Msg 3903, Level 16, State 1, Procedure EnrollStudent, Line 131
  173. The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
  174.  
  175. (1 row(s) affected)
  176.  
  177. BEGIN TRANSACTION;
  178. BEGIN TRY
  179.  
  180. --execute all your stored proc code here and then commit
  181. COMMIT;
  182.  
  183. END TRY
  184. BEGIN CATCH
  185.  
  186. --if an exception occurs execute your rollback, also test that you have had some successful transactions
  187. IF @@TRANCOUNT > 0 ROLLBACK;
  188.  
  189. END CATCH
  190.  
  191. BEGIN TRAN Tr1
  192.  
  193. -- your code
  194.  
  195. ROLLBACK TRAN Tr1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement