Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर RAISERROR स्टेटमेंट सरल उदाहरणों के साथ

SQL RAISERROR स्टेटमेंट का उपयोग क्लाइंट एप्लिकेशन को एक कस्टम संदेश भेजने के लिए किया जाता है। इसका उपयोग एप्लिकेशन को डीबग करने के लिए भी किया जा सकता है और त्रुटि प्रबंधन तंत्र पर लागू होता है।

SQL RAISERROR Statement Syntax and Parameters

SQL RAISERROR स्टेटमेंट का सिंटैक्स निम्नलिखित है:

RAISERROR ( { message_text | message_id | @local_variable }  
    { ,severity ,state }  
    [ ,argument [ ,...n ] ]   
    [ WITH option [ ,...n ] ];

नीचे आप RAISERROR कीवर्ड पैरामीटर की व्याख्या देख सकते हैं जिन्हें आप निर्दिष्ट कर सकते हैं:

message_text - वह संदेश जिसे आप किसी त्रुटि के लिए प्रदर्शित करना चाहते हैं। नोट: हम त्रुटि जानकारी दिखाने के लिए कस्टम संदेश जोड़ सकते हैं। इसे लेख के दूसरे भाग में समझाया गया देखें।

message_id - त्रुटि संदेश की आईडी। यदि आप उपयोगकर्ता द्वारा परिभाषित संदेश प्रदर्शित करना चाहते हैं, तो आपको इसे परिभाषित करना होगा। sys.messages DMV . में message_ids की सूची देखें

क्वेरी

select * from sys.messages

आउटपुट:

गंभीरता - त्रुटि की गंभीरता। गंभीरता . का डेटा प्रकार चर छोटा सा है , और मान 0 और 25 के बीच हैं। त्रुटि गंभीरता के मान्य मान इस प्रकार हैं:

  • 0-10 - सूचनात्मक संदेश
  • 11-18 - त्रुटियां
  • 19-25 - घातक त्रुटियां

नोट : यदि आप एक उपयोगकर्ता-परिभाषित संदेश बनाते हैं, तो उपयोगकर्ता-परिभाषित संदेश में निर्दिष्ट गंभीरता RAISERROR कथन में निर्दिष्ट गंभीरता से ओवरराइड हो जाएगी।

राज्य - विशिष्ट पहचान संख्या जिसका उपयोग आप उस कोड अनुभाग की पहचान करने के लिए कर सकते हैं जो त्रुटि उत्पन्न कर रहा है। राज्य पैरामीटर . का डेटा प्रकार छोटा सा है , और मान 0 और 255 के बीच हैं।

अब, हम व्यावहारिक उदाहरणों पर आगे बढ़ते हैं।

उदाहरण 1:आउटपुट प्रिंट करने के लिए SQL सर्वर RAISERROR स्टेटमेंट का उपयोग करें

इस उदाहरण में, आप देख सकते हैं कि हम RAISERROR स्टेटमेंट का उपयोग करके त्रुटि या सूचना संदेश कैसे प्रदर्शित कर सकते हैं।

मान लीजिए कि आप तालिका में रिकॉर्ड डालने के बाद संदेश प्रदर्शित करना चाहते हैं। हम SQL PRINT या RAISERROR स्टेटमेंट का उपयोग कर सकते हैं। निम्नलिखित कोड है:

SET nocount ON 

INSERT INTO tblpatients 
            (patient_id, 
             patient_name, 
             address, 
             city) 
VALUES     ('OPD00006', 
            'Nimesh Upadhyay', 
            'AB-14, Ratnedeep Flats', 
            'Mehsana') 

RAISERROR ( 'Patient detail added successfully',1,1) 

आउटपुट:

जैसा कि आप ऊपर की छवि में देख सकते हैं, संदेश आईडी 50000 है क्योंकि यह एक उपयोगकर्ता द्वारा परिभाषित संदेश है।

उदाहरण 2:डायनेमिक मैसेज टेक्स्ट के साथ SQL RAISERROR स्टेटमेंट

अब, देखें कि हम SQL RAISERROR स्टेटमेंट के लिए डायनामिक मैसेज टेक्स्ट कैसे बना सकते हैं।

मान लीजिए हम मैसेज में मरीज की आईडी प्रिंट करना चाहते हैं। मैंने @PatientID . नामक स्थानीय चर को परिभाषित किया है , जिसमें रोगी_आईडी . है . @patientID . का मान प्रदर्शित करने के लिए संदेश पाठ के भीतर चर, हम निम्नलिखित कोड का उपयोग कर सकते हैं:

DECLARE @PatientID VARCHAR(15) 
DECLARE @message NVARCHAR(max) 

SET @PatientID='OPD00007' 
SET @message ='Patient detail added successfully. The OPDID is %s' 

INSERT INTO tblpatients 
            (patient_id, 
             patient_name, 
             address, 
             city) 
VALUES     ('' + @PatientID + '', 
            'Nimesh Upadhyay', 
            'AB-14, Ratnedeep Flats', 
            'Mehsana') 

RAISERROR ( @message,1,1,@patientID) 

आउटपुट:

RAISERROR स्टेटमेंट में स्ट्रिंग को प्रदर्शित करने के लिए, हमें C-स्टाइल प्रिंट स्टेटमेंट का उपयोग करना चाहिए।

जैसा कि आप ऊपर की छवि में देख सकते हैं, से संदेश पाठ में पैरामीटर प्रदर्शित करें, मैंने %s विकल्प . का उपयोग किया है जो पैरामीटर का स्ट्रिंग मान प्रदर्शित करता है . यदि आप पूर्णांक पैरामीटर प्रदर्शित करना चाहते हैं , आप %d विकल्प . का उपयोग कर सकते हैं ।

TRY..CATCH Block में SQL RAISERROR का उपयोग करें

इस उदाहरण में, हम TRY ब्लॉक में SQL RAISERROR जोड़ रहे हैं। जब हम इस कोड को चलाते हैं, तो यह संबंधित CATCH ब्लॉक में निष्पादित होता है। कैच ब्लॉक में, हम लागू की गई त्रुटि का विवरण प्रदर्शित करेंगे।

BEGIN try 
    RAISERROR ('Error invoked in the TRY code block.',16,1 ); 
END try 

BEGIN catch 
    DECLARE @ErrorMsg NVARCHAR(4000); 
    DECLARE @ErrSeverity INT; 
    DECLARE @ErrState INT; 

    SELECT @ErrorMsg = Error_message(), 
           @ErrSeverity = Error_severity(), 
           @ErrState = Error_state(); 

    RAISERROR (@ErrorMsg,
               @ErrSeverity,
               @ErrState 
    ); 
END catch;

इस प्रकार, हमने RAISERROR कथन को गंभीरता . के साथ जोड़ा है 11-19 के बीच। यह कैच ब्लॉक के निष्पादन का कारण बनता है।

CATCH ब्लॉक के भीतर, हम RAISERROR स्टेटमेंट का उपयोग करके मूल त्रुटि की जानकारी दिखा रहे हैं।

आउटपुट:

जैसा कि आप देख सकते हैं, कोड ने मूल त्रुटि के बारे में जानकारी लौटा दी है।

अब, आइए समझते हैं कि हम sp_addmessage का उपयोग करके कस्टम संदेश कैसे जोड़ सकते हैं संग्रहीत प्रक्रिया।

sp_addmessage संग्रहित प्रक्रिया

हम sp_addmessages . को क्रियान्वित करके कस्टम संदेश जोड़ सकते हैं संग्रहीत प्रक्रिया। वाक्य रचना है:

EXEC Sp_addmessage 
  @msgnum= 70001, 
  @severity=16, 
  @msgtext='Please enter the numeric value', 
  @lang=NULL, 
  @with_log='TRUE', 
  @replace='Replace'; 

@msgnum: संदेश संख्या निर्दिष्ट करें। पैरामीटर का डेटा प्रकार पूर्णांक है। यह उपयोगकर्ता द्वारा परिभाषित संदेश के लिए एक संदेश आईडी है।

@गंभीरता: त्रुटि की गंभीरता का स्तर निर्दिष्ट करें। मान्य मान 1 और 25 के बीच हैं। पैरामीटर का डेटा प्रकार छोटा है।

@messagetext: वह संदेश निर्दिष्ट करें जिसे आप प्रदर्शित करना चाहते हैं। पैरामीटर का डेटा प्रकार nvarchar(255), . है और डिफ़ॉल्ट मान NULL है।

@lang: त्रुटि संदेश प्रदर्शित करने के लिए आप जिस भाषा का उपयोग करना चाहते हैं उसे निर्दिष्ट करें। डिफ़ॉल्ट मान NULL है।

@with_log: इस पैरामीटर का उपयोग इवेंट व्यूअर को संदेश लिखने के लिए किया जाता है। मान्य मान TRUE और FALSE हैं। यदि आप TRUE निर्दिष्ट करते हैं, तो त्रुटि संदेश विंडोज़ इवेंट व्यूअर को लिखा जाएगा। यदि आप FALSE चुनते हैं, तो त्रुटि विंडोज़ त्रुटि लॉग में नहीं लिखी जाएगी।

@बदलें: यदि आप मौजूदा त्रुटि संदेश को उपयोगकर्ता-परिभाषित संदेश और गंभीरता स्तर से बदलना चाहते हैं, तो आप संग्रहीत कार्यविधि में प्रतिस्थापन निर्दिष्ट कर सकते हैं।

मान लीजिए आप एक त्रुटि संदेश बनाना चाहते हैं जो एक अमान्य गुणवत्ता लौटाता है त्रुटि। INSERT कथन में, product_quantity . का मान 20 और 100 के बीच है। संदेश को एक त्रुटि के रूप में माना जाना चाहिए, और गंभीरता 16 है।

संदेश बनाने के लिए, निम्न क्वेरी चलाएँ:

USE master;
go 
EXEC Sp_addmessage 
  70001, 
  16, 
  N'Product Quantity must be between 20 and 100.'; 
go

संदेश जोड़ने के बाद, इसे देखने के लिए नीचे दी गई क्वेरी चलाएँ:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

आउटपुट:

उपयोगकर्ता-परिभाषित त्रुटि संदेशों का उपयोग कैसे करें

जैसा कि मैंने पहले उल्लेख किया है, हमें message_id . का उपयोग करना चाहिए उपयोगकर्ता द्वारा परिभाषित संदेशों के लिए RAISERROR कथन में।

हमने 70001 की आईडी के साथ एक संदेश बनाया है। RAISERROR स्टेटमेंट इस प्रकार होना चाहिए:

USE master 
go 
RAISERROR (70001,16,1 ); 
go 

आउटपुट:

RAISERROR कथन ने उपयोगकर्ता द्वारा परिभाषित संदेश लौटा दिया है।

sp_dropmessage संग्रहित प्रक्रिया

sp_dropmessage उपयोगकर्ता द्वारा परिभाषित संदेशों को हटाने के लिए संग्रहीत प्रक्रिया का उपयोग किया जाता है। सिंटैक्स निम्न है:

EXEC Sp_dropmessage @msgnum

वाक्य रचना में, @msgnum उस संदेश की आईडी निर्दिष्ट करता है जिसे आप हटाना चाहते हैं।

अब, हम उस संदेश को हटाना चाहते हैं जिसका आईडी 70001 . है . क्वेरी इस प्रकार है:

EXEC Sp_dropmessage 70001 

एक बार संदेश हटा दिए जाने के बाद, इसे देखने के लिए निम्न क्वेरी चलाएँ:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

आउटपुट:

जैसा कि आप देख सकते हैं, संदेश हटा दिया गया है।

सारांश

इस प्रकार, हमने RAISERROR कथन, इसके मापदंडों की खोज की है, और व्यावहारिक उदाहरणों में इसके उपयोग का प्रदर्शन किया है। हमने sp_addmessage . के उपयोग को भी स्पष्ट किया है और sp_dropmessage संग्रहित प्रक्रियाएं। आशा है कि यह लेख आपके काम करने के लक्ष्यों के लिए कुछ उपयोगी जानकारी लेकर आया है।

यदि आप उन्हें साझा करना चाहते हैं तो हमें आपकी टिप्पणियों और अतिरिक्त व्यावहारिक सुझावों को सुनकर हमेशा खुशी होती है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मुझे varchar या int की प्राथमिक कुंजी वाली तालिका डिज़ाइन करनी चाहिए?

  2. पता लगाएँ कि क्या कोई विभाजन SQL सर्वर (T-SQL) में संपीड़ित है

  3. एक्सएमएल सर्वर एक्सएमएल प्रदर्शन अनुकूलन

  4. SQL तालिका से डुप्लिकेट पंक्तियों को हटाना (एकाधिक स्तंभों के मानों के आधार पर)

  5. SELECT DISTINCT विभिन्न मामलों पर ध्यान नहीं देता