हाय मैं एक संग्रहीत प्रक्रिया लिख रहा हूं जो एक घंटे के शेड्यूल पर नौकरियों का एक बैच निष्पादित करेगा और मैं यह तय करने की कोशिश कर रहा हूं कि त्रुटियों को वापस करना है या उन्हें उठाएं। मान लीजिए कि मैं प्रत्येक नौकरी के अंदर त्रुटियों को लॉग कर रहा हूं जिससे बेहतर प्रदर्शन और रखरखाव हो सकता है?टी-एसक्यूएल रिटर्न त्रुटि कोड बनाम RaiseError
उदा
--with त्रुटि कोड
CREATE PROCEDURE Job1
AS
BEGIN
BEGIN TRY
--Do some work
END TRY
BEGIN CATCH
--log error
RETURN 1; --Return 1 for error
END CATCH
RETURN 0;
END
CREATE PROCEDURE USP_BatchJob
AS
BEGIN
BEGIN TRANSACTION;
DECLARE @Error INT;
EXEC @Error = Job1;
IF @Error <> 0
GOTO ErrorHandling;
EXEC @Error = Job1;
IF @Error <> 0
GOTO ErrorHandling;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
RETURN;
ErrorHandling:
IF @@TRANCOUNT > 0
ROLLBACK;
END
उदा RaiseError
CREATE PROCEDURE Job1
AS
BEGIN
BEGIN TRY
--Do some work
END TRY
BEGIN CATCH
--log error
RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), ERROR_STATE());
END CATCH
END
CREATE PROCEDURE USP_BatchJob
AS
BEGIN
BEGIN TRANSACTION
BEGIN TRY
EXEC Job1;
EXEC Job1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK;
END CATCH
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END
उत्तरार्द्ध शैली कोडिंग के बारे में होने के नाते अधिक maintainable कोड
* '... क्योंकि संग्रहीत प्रक्रियाएं पूर्ण वापस लौट सकती हैं' * - यह कथन गलत प्रतीत होता है। [एसक्यूएल सर्वर 2000 रिटर्न मैनुअल] (http://msdn.microsoft.com/en-us/library/aa238375%28v=sql.80%29.aspx) के साथ-साथ [SQL सर्वर 2012 एक द्वारा) द्वारा निर्णय ] (http://msdn.microsoft.com/en-us/library/ms174998%28v=sql.110%29.aspx), SQL सर्वर में संग्रहित प्रक्रिया पूर्ण वापस नहीं आ सकती है। –
यह वास्तव में गलत है। मैंने कोशिश की (एसक्यूएल सर्वर 2012) और इसे प्राप्त किया: 'ReturnNullTest'procedure ने NULL की स्थिति वापस करने का प्रयास किया, जिसकी अनुमति नहीं है। इसके बजाय 0 की स्थिति वापस कर दी जाएगी। हालांकि शेष उत्तर बहुत उपयोगी है। – Davos
@ डेवोस। । । Phrasing सुरुचिपूर्ण है। संग्रहीत प्रक्रियाएं 'NULL' वापस नहीं आती हैं, लेकिन अगर संग्रहीत प्रक्रिया विफल हो जाती है, तो कॉलर द्वारा पता लगाया गया वापसी मान 'NULL' है। या, यदि संग्रहीत प्रक्रिया में कोई 'वापसी' कथन नहीं है। –