मेरा मानना है कि कुछ अपवाद हैं, लेकिन डेटाबेस इंजन त्रुटि से सुरक्षा (MSDN) :
19 या उच्चतर स्तर की गंभीरता वाले संदेश वर्तमान बैच के निष्पादन को रोकते हैं।
डेटाबेस कनेक्शन को समाप्त करने वाली त्रुटियां, आमतौर पर 20 से 25 के बीच की गंभीरता के साथ, CATCH ब्लॉक द्वारा नियंत्रित नहीं की जाती हैं क्योंकि कनेक्शन समाप्त होने पर निष्पादन रोक दिया जाता है।
तो ऐसा लगता है कि आप निम्नलिखित क्वेरी से एक निश्चित सूची प्राप्त कर सकते हैं (निश्चित रूप से यह आपको फ़िल्टर करने की अनुमति नहीं देगा कि उपयोगकर्ता टी-एसक्यूएल के कारण कौन से हो सकते हैं):
SELECT message_id, severity, [text]
FROM sys.messages
WHERE language_id = 1033
AND severity >= 19
ORDER BY severity, message_id;
SQL Server 2012 में, यह 210 पंक्तियों का उत्पादन करता है।
SQL सर्वर 2016 में, यह 256 पंक्तियों का उत्पादन करता है।
वैसे, मैं नहीं मानता कि आपके प्रश्न में वर्णित दो परिदृश्य आपके सोचने के तरीके पर काम करते हैं, कम से कम SQL सर्वर के आधुनिक संस्करणों में नहीं। मैंने 2012 और 2016 दोनों पर यह कोशिश की (मेरा मानना है कि एरलैंड का लेख SQL Server 2000 व्यवहार का वर्णन करता है, जो मुझे याद नहीं है कि यह कोई अलग था, लेकिन आज भी बहुत प्रासंगिक नहीं है, भले ही ऐसा हो)।
USE tempdb;
GO
CREATE PROCEDURE dbo.pA -- no parameters
AS PRINT 1
GO
CREATE PROCEDURE dbo.pB -- two parameters
@x INT, @y INT
AS PRINT 1
GO
SET XACT_ABORT OFF;
GO
EXEC dbo.pA @foo = 1;
PRINT '### Calling procedure that doesn''t take parameters with a parameter';
GO
EXEC dbo.pB;
PRINT '### Calling procedure that takes 2 parameters with no parameters';
GO
EXEC dbo.pB @x = 1;
PRINT '### Calling procedure that takes 2 parameters with not enough parameters';
GO
EXEC dbo.pB @x = 1, @y = 2, @z = 3;
PRINT '### Calling procedure that takes 2 parameters with too many parameters';
GO
ये सभी गंभीरता स्तर 16 की त्रुटियां पैदा करते हैं, और ये सभी प्रिंट आउटपुट के अनुसार, बैच के साथ आगे बढ़ते हैं:
Msg 8146, स्तर 16, राज्य 2, प्रक्रिया पीए, लाइन 11
प्रक्रिया पीए में कोई पैरामीटर नहीं है और तर्कों की आपूर्ति की गई थी।
### कॉलिंग प्रक्रिया जो एक पैरामीटर के साथ पैरामीटर नहीं लेती है
Msg 201, Level 16, State 4, Procedure pB, Line 14
प्रक्रिया या फ़ंक्शन 'pB' पैरामीटर '@x' की अपेक्षा करता है, जिसकी आपूर्ति नहीं की गई थी।
### कॉलिंग प्रक्रिया जिसमें कोई पैरामीटर नहीं है के साथ 2 पैरामीटर लेता है
Msg 201, Level 16, State 4, Procedure pB, Line 18
प्रक्रिया या फ़ंक्शन 'pB' पैरामीटर '@y' की अपेक्षा करता है, जिसकी आपूर्ति नहीं की गई थी।
### कॉलिंग प्रक्रिया जो 2 मापदंडों को पर्याप्त पैरामीटर नहीं लेती है
Msg 8144, स्तर 16, राज्य 2, प्रक्रिया पीबी, लाइन 22
प्रक्रिया या फ़ंक्शन पीबी में बहुत सारे तर्क निर्दिष्ट हैं।
### कॉलिंग प्रक्रिया जो कई मापदंडों के साथ 2 पैरामीटर लेती है
जैसा कि मुझे संदेह था, अपवाद हैं, निश्चित रूप से, टिप्पणियों में नोट किया गया है। रूपांतरण विफलता की गंभीरता 16 है लेकिन यह बैच को समाप्त कर देती है:
SET XACT_ABORT OFF;
SELECT CONVERT (INT, 'foo');
PRINT 'Made it.'; -- no print happens
परिणाम में इस बार प्रिंट आउटपुट शामिल नहीं है:
Msg 245, स्तर 16, राज्य 1
रूपांतरण डेटा प्रकार int के लिए varchar मान 'foo' परिवर्तित करते समय विफल रहा।