Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You create a table named Products by running the following Transact-SQL statement:
You have the following stored procedure: You need to modify the stored procedure to meet the following new requirements:
.- Insert product records as a single unit of work.
.- Return error number 51000 when a product fails to insert into the database.
.- If a product record insert operation fails, the product information must not be permanently written to the database.
Solution: You run the following Transact-SQL statement:
Does this meet the goal?
A . Yes
B . No
Answer: A
Explanation:
It doesn’t matter if Xact_state is not given the system automatically rollbacks, as the transaction state is uncommited and you can’t make an update in the transaction, as the query will satisfy the requirements
Note: XACT_STATE is a scalar function that reports the user transaction state of a current running request. XACT_STATE indicates whether the request has an active user transaction, and whether the transaction is capable of being committed.
The states of XACT_STATE are:
0 There is no active user transaction for the current request.
.- 1 The current request has an active user transaction. The request can perform any actions, including writing data and committing the transaction.
.- 2 The current request has an active user transaction, but an error has occurred that has caused the
transaction to be classified as an uncommittable transaction.
Example of correct use:
BEGIN CATCH — Test XACT_STATE for 0, 1, or -1. — If 1, the transaction is committable. — If -1, the transaction is uncommittable and should –be rolled back. — XACT_STATE = 0 means there is no transaction and –a commit or rollback operation would generate an error.
— Test whether the transaction is uncommittable. IF (XACT_STATE()) = -1 BEGIN
PRINT ‘The transaction is in an uncommittable state.’ + ‘ Rolling back transaction.’ ROLLBACK TRANSACTION; END;
— Test whether the transaction is active and valid. IF (XACT_STATE()) = 1 BEGIN
PRINT ‘The transaction is committable.’ + ‘ Committing transaction.’ COMMIT TRANSACTION; END; END CATCH;
References: https://msdn.microsoft.com/en-us/library/ms188792.aspx
https://msdn.microsoft.com/en-us/library/ms189797.aspx
Leave a Reply