क्या संग्रहीत कार्यविधि में सभी परिणाम सेटों के लिए मेटाडेटा वापस करने के लिए एक प्रक्रिया मौजूद है?
हाँ और न।
नहीं
पहले परिणाम सेट से अधिक एक्सेस करने का कोई शुद्ध T-SQL साधन नहीं है। यहां तक कि OPENROWSET और OPENQUERY की एक ही सीमा है:
हालाँकि क्वेरी कई परिणाम सेट लौटा सकती है, लेकिन OPEN (ROWSET | QUERY) केवल पहले वाला रिटर्न देता है।
रिकॉर्ड के लिए, मैं न तो कह रहा हूं और न ही यह कह रहा हूं कि इस सीमा का कोई सामान्य तकनीकी कारण है। मैं तो बस उनका कहना है कि सीमा तक ही सीमित नहीं है sp_describe_first_result_set
, sys.dm_exec_describe_first_result_set
और sys.dm_exec_describe_first_result_set_for_object
।
हाँ
जानकारी कैप्चर करने का एकमात्र तरीका - परिणाम सेट मेटा-डेटा और यहां तक कि परिणाम - परिणाम सेट 2 के लिए - n एप्लिकेशन कोड के माध्यम से है। आप पहली बार प्रश्नों के लिए / संग्रहीत प्रक्रिया (रों) का उपयोग करके निष्पादित होगा SqlCommand.ExecuteReader (CommandBehavior) एक साथ CommandBehavior की KeyInfo
। उसके बाद, आप परिणाम सेट मेटा डेटा को SqlDataReader.GetSchemaTable पद्धति का उपयोग करके प्राप्त कर सकते हैं , और परिणाम सेट के माध्यम से साइकिल करने के लिए SqlDataReader.NextResult विधि को कॉल कर सकते हैं । बस ध्यान रखें कि ऐप कोड के माध्यम से ऐसा करते समय डायनेमिक SQL और अस्थायी तालिकाओं के साथ काम न करने की सीमाएँ नहीं होती हैंवास्तव में एसक्यूएल कोड चलाते हैं, और यदि आपके पास डीएमएल स्टेटमेंट हैं और केवल परिणाम सेट मेटा-डेटा बिना किसी डेटा परिवर्तन के चाहते हैं, तो आपको उस एसक्यूएल को लपेटना होगा जिसे आप BEGIN TRAN
/ में परीक्षण कर रहे हैं ROLLBACK TRAN
।
एप्लिकेशन का प्रकार एक नियमित विंडोज ऐप, कंसोल ऐप, वेब ऐप आदि हो सकता है, या यह SQLCLR फ़ंक्शन या संग्रहीत प्रक्रिया भी हो सकती है।
SQLCLR के माध्यम से ऐसा करने के संबंध में, एक संग्रहीत प्रक्रिया पहले से मौजूद है जो कि यहां वर्णित है। इसे DB_DescribeResultSets कहा जाता है और यह एसक्यूएल # लाइब्रेरी का हिस्सा है (जो कि मैं लेखक हूं, और जब एक नि: शुल्क संस्करण है, तो DB_DescribeResultSets केवल पूर्ण संस्करण में उपलब्ध है)।