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

मैं एक संग्रहीत प्रक्रिया से अस्थायी तालिका में एकाधिक आउटपुट कैसे प्राप्त करूं?

आप संग्रहीत कार्यविधि को संशोधित किए बिना नहीं कर सकते।

SQL सर्वर में, आप केवल INSERT...EXEC के माध्यम से किसी अन्य तालिका में संग्रहीत कार्यविधि का पहला परिणाम सेट सम्मिलित कर सकते हैं . कॉलम की संख्या और स्थिति बिल्कुल मेल खाना चाहिए, और INSERT...EXEC नेस्टेड नहीं किया जा सकता है, यानी आप proc1 से proc2 में एक तालिका में सम्मिलित नहीं कर सकते हैं, और फिर proc2 से proc3 में एक तालिका में सम्मिलित कर सकते हैं। तो INSERT...EXEC पूरी तरह से असंतोषजनक समाधान है।

वर्कअराउंड कॉलिंग स्कोप में परिभाषित अस्थायी तालिकाओं में परिणाम सम्मिलित करने की प्रक्रिया को संशोधित करता है, जैसे:

create proc get_some_data as
insert #temp1 (col1, col2) select col1, col2 from table1
insert #temp2 (colA, colB) select colA, colB from table2
go
create table #temp1 (col1 int, col2 int)
create table #temp2 (colA int, colB int)
exec get_some_data
select * from #temp1
select * from #temp2
drop table #temp1
drop table #temp2
go

यदि आप प्रक्रिया को संशोधित नहीं कर सकते हैं, आप भाग्य से बाहर हैं। सुधार :जैसा कि HABO ने कृपया बताया, आप कर सकते थे परिणाम सेट को पुनरावृत्त करने के लिए सीएलआर का उपयोग करें। विवरण के लिए नीचे लिंक देखें। बहुत बुरा नहीं है यदि आप जानते हैं कि आप क्या कर रहे हैं, और आपके पास कोई अन्य विकल्प नहीं है।

संग्रहीत प्रक्रियाओं के बीच डेटा साझा करने के बारे में अधिक जानकारी के लिए, एरलैंड सोमरस्कोग द्वारा यह बहुत व्यापक लेख देखें:http:// www.sommarskog.se/share_data.html




  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 में महीने का अंतिम दिन प्राप्त करें

  2. Row_number () का उपयोग करके तालिका से डुप्लिकेट रिकॉर्ड हटाने की आवश्यकता है

  3. विभाजित दृश्य निष्पादन योजना

  4. एलिमिनेशन में शामिल हों:जब SQL सर्वर अनावश्यक टेबल्स को हटाता है

  5. माइक्रोसॉफ्ट द्वारा डाटाबेस नेमिंग कन्वेंशन?