अच्छी खबर यह है कि 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 बिल्डिंग कोड लेन-देन (ऊपर) से बाहर होना चाहिए क्योंकि आप हमेशा अपने लेन-देन को यथासंभव छोटा रखना चाहते हैं।