अच्छी खबर यह है कि SQL सर्वर में एक लेन-देन कई बैचों में हो सकता है (प्रत्येक exec एक अलग बैच के रूप में माना जाता है।)
आप अपना EXEC wrap लपेट सकते हैं BEGIN TRANSACTION . में स्टेटमेंट और COMMIT लेकिन अगर कोई त्रुटि होती है तो आपको एक कदम आगे जाकर रोलबैक करना होगा।
आदर्श रूप से आप कुछ इस तरह चाहते हैं:
BEGIN TRY
BEGIN TRANSACTION
exec( @sqlHeader)
exec(@sqlTotals)
exec(@sqlLine)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
END CATCH
BEGIN TRANSACTION और COMMIT मुझे विश्वास है कि आप पहले से ही परिचित हैं। BEGIN TRY और BEGIN CATCH ब्लॉक मूल रूप से होने वाली किसी भी त्रुटि को पकड़ने और संभालने के लिए होते हैं। अगर आपका कोई EXEC कथन त्रुटि उत्पन्न करते हैं, कोड निष्पादन CATCH पर कूद जाएगा खंड मैथा।
आपका मौजूदा SQL बिल्डिंग कोड लेन-देन (ऊपर) से बाहर होना चाहिए क्योंकि आप हमेशा अपने लेन-देन को यथासंभव छोटा रखना चाहते हैं।