मैं SQL Server 2012 का उपयोग कर रहा हूं और मैंने रोलबैक लेनदेन के साथ एक छोटी संग्रहित प्रक्रिया लिखी है। मेरे प्रक्रिया इस प्रकार है:यदि @@ Trancount> 0 काम नहीं कर रहा है
ALTER PROCEDURE [dbo].[uspInsertEmployee]
@EmpId int,
@EmployeeName varchar(50),
@DeptId int
AS
BEGIN
BEGIN TRY
insert into Departments values (@DeptId, 'Testing 1');
insert into Employees values (@EmpId, @EmployeeName, @DeptId);
END TRY
BEGIN CATCH
--log error here
Goto Error_Rollback
END CATCH
Error_Rollback:
IF @@TRANCOUNT > 0
BEGIN
print 'rolling back transaction' /* <- this is never printed */
ROLLBACK TRAN
END
END
आप देख सकते हैं, अगर हालत में, जब TRANCOUNT> 0 @@, मैं लेनदेन रोलबैक करने के लिए कोशिश कर रहा हूँ, लेकिन जब मैं प्रक्रिया पर अमल करें, रोलबैक बयान है कभी निष्पादित नहीं किया गया, मैंने प्रक्रिया को डीबग कर दिया है और @@ TRANCOUNT का मान 1 है। लेकिन मुझे अभी भी समझ में नहीं आता कि यह क्यों काम नहीं कर रहा है। और मुझे पता चला कि हमें रोलबैक के लिए स्टार्ट ट्रैन और एंड ट्रैन का उपयोग करने की आवश्यकता नहीं है।
क्या कोई इस मुद्दे को हल करने में मेरी सहायता कर सकता है।
संपादित
खेद है कि मैं कि उल्लेख करना भूल गया, एक त्रुटि दूसरा डालने बयान में होता है।
आपका कहना है कि स्पष्ट लेनदेन के बिना, @@ trancount मान हमेशा शून्य अनुष्ठान होगा? लेकिन मैं डिबगिंग करते समय, मैंने @@ trancount मान 1 के रूप में देखा। लेकिन मैं किसी भी प्रारंभिक ट्रैन का उपयोग नहीं कर रहा हूं और ट्रैन प्रतिबद्ध नहीं हूं। – Harsha
यह एक ऑटोोकॉमिट लेनदेन है और निहित नहीं है, जब तक कि SET IMPLICIT_TRANSACTION चालू न हो, या सेट एएनएसआई डिफॉल्ट चालू हो, हालांकि उत्तर सही है। –