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

कैसे ठीक करें "निष्पादन कथन विफल हुआ क्योंकि इसके परिणाम सेट क्लॉज के साथ परिणाम सेट के लिए 2 कॉलम निर्दिष्ट हैं ..." SQL सर्वर में संदेश 11537

यदि आप SQL सर्वर में त्रुटि संदेश 11537, स्तर 16 का सामना करते हैं, तो संभावना है कि आप WITH RESULT SETS का उपयोग करके एक संग्रहीत कार्यविधि को निष्पादित करने का प्रयास कर रहे हैं। खंड, लेकिन आपने अपनी परिभाषा में सभी स्तंभों को शामिल नहीं किया है।

जब आप WITH RESULT SETS का उपयोग करते हैं EXECUTE . में क्लॉज /EXEC कथन, आपको संग्रहीत कार्यविधि द्वारा लौटाए गए सभी स्तंभों के लिए एक परिभाषा प्रदान करनी होगी। यदि आप नहीं करते हैं, तो आपको यह त्रुटि मिलेगी।

उदाहरण

निम्न संग्रहीत कार्यविधि तीन कॉलम लौटाती है।

EXEC sp_getCityById @CityId = 1;

परिणाम:

+------------+----------------------------+-----------------------------+
| CityName   | LatestRecordedPopulation   | ValidFrom                   |
|------------+----------------------------+-----------------------------|
| Aaronsburg | 613                        | 2013-01-01 00:00:00.0000000 |
+------------+----------------------------+-----------------------------+

अब, मान लीजिए कि हम कुछ स्तंभों को फिर से परिभाषित करना चाहते हैं। हम WITH RESULT SETS का उपयोग कर सकते हैं ऐसा करने के लिए खंड।

समस्या कोड

लेकिन अगर हम इस खंड में सभी तीन कॉलम शामिल नहीं करते हैं, तो हमें एक त्रुटि मिलेगी।

EXEC sp_getCityById @CityId = 1
    WITH RESULT SETS   
    (  
        (
            [City] nvarchar(50),
            [Population] int
        )
    );

परिणाम:

Msg 11537, Level 16, State 1, Procedure sp_getCityById, Line 5
EXECUTE statement failed because its WITH RESULT SETS clause specified 2 column(s) for result set number 1, but the statement sent 3 column(s) at run time.

त्रुटि संदेश हमें बताता है कि हमने कितने कॉलम निर्दिष्ट किए, और कितने संग्रहीत प्रक्रिया द्वारा भेजे गए थे।

इस मामले में, हमने दो कॉलम निर्दिष्ट किए लेकिन प्रक्रिया ने तीन को भेजा।

अच्छा कोड

हम तीसरे कॉलम को शामिल करके इस समस्या को ठीक कर सकते हैं।

EXEC sp_getCityById @CityId = 1
    WITH RESULT SETS   
    (  
        (
            [City] nvarchar(50),
            [Population] int,
            [Valid From] date
        )
    );

परिणाम:

------------+--------------+--------------+
| City       | Population   | Valid From   |
|------------+--------------+--------------|
| Aaronsburg | 613          | 2013-01-01   |
+------------+--------------+--------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में अद्वितीय बाधा क्या है - SQL सर्वर / TSQL ट्यूटोरियल भाग 95

  2. आल्टर स्टेटमेंट का उपयोग करके SQL सर्वर में तालिका को कैसे बदलें - SQL सर्वर / T-SQL ट्यूटोरियल भाग 35

  3. क्या मुझे कैस्केड डिलीट नियम का उपयोग करना चाहिए?

  4. SQL क्वेरी के साथ अल्पविराम से अलग किए गए मान

  5. SQL क्वेरी द्वारा किसी विशेष डेटाबेस के सभी तालिका नाम प्राप्त करें?