कई परिणाम सेट के लिए dm_exec_describe_first_result_set_for_object


9

क्या संग्रहीत कार्यविधि में सभी परिणाम सेटों के लिए मेटाडेटा वापस करने के लिए एक प्रक्रिया मौजूद है?

कुछ पसंद है sys.dm_exec_describe_first_result_set_for_object, लेकिन सभी परिणाम सेट के लिए?

आखिरकार, मैं डेटाबेस में हर संग्रहीत प्रक्रिया में सेट किए गए हर परिणाम के लिए मेटाडेटा की खोज करना चाहता हूं। अभी के लिए, मैं केवल परिणाम सेट के लिए तय करूंगा जो sys.dm_exec_describe_first_result_set_for_objectवर्णन नहीं कर सकता। यही है, दूसरा, तीसरा और Nth परिणाम सेट करता है।

ऐसा करने के लिए SQLCLR का उपयोग करते हुए देख रहे हैं:

कैसे एक से अधिक परिणाम सेट tSQLt - SQL सर्वर के लिए DB यूनिट परीक्षण - ResultSetForter.cs के साथ एक प्रक्रिया के परिणामों को बचाने के
लिए


3
नहीं, SQL Server के भीतर ऐसी कोई बात नहीं है, आपको इसे करने के लिए कोड लिखना होगा (और आपको बहुत सारे मामलों में अनुमान लगाना होगा)।
हारून बर्ट्रेंड

जवाबों:


3

क्या संग्रहीत कार्यविधि में सभी परिणाम सेटों के लिए मेटाडेटा वापस करने के लिए एक प्रक्रिया मौजूद है?

हाँ और न।

नहीं

पहले परिणाम सेट से अधिक एक्सेस करने का कोई शुद्ध 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 केवल पूर्ण संस्करण में उपलब्ध है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.