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

SQL सर्वर में एक अस्थायी तालिका में संग्रहीत कार्यविधि के परिणाम कैसे सम्मिलित करें

SQL सर्वर के साथ कुछ मामलों में, एक उदाहरण हो सकता है जहाँ आप परिणामी डेटा को संग्रहीत कार्यविधि से लेना चाहते हैं और इसे किसी अन्य क्वेरी में उपयोग के लिए एक अस्थायी तालिका में सम्मिलित करना चाहते हैं। यह निर्धारित करना कि इस कार्य को कैसे पूरा किया जाए, कुछ मुश्किल हो सकता है, इसलिए हम आपकी विशिष्ट आवश्यकताओं और डेटाबेस कॉन्फ़िगरेशन के आधार पर कुछ विकल्पों की संक्षेप में रूपरेखा तैयार करेंगे।

विशिष्ट विधियों की जांच करने से पहले, आइए एक उदाहरण प्रक्रिया बनाएं। जबकि विशेष रूप से उपयोगी नहीं है, आइए BooksByPrimaryAuthor . बनाएं प्रक्रिया, जो @PrimaryAuthor . को स्वीकार करती है हमारे books . से पैरामीटर और ग्रैब रिकॉर्ड तालिका जहां वह @PrimaryAuthor . है मैच। प्रक्रिया निर्माण विवरण इस तरह दिख सकता है:

CREATE PROC BooksByPrimaryAuthor
  @PrimaryAuthor nvarchar(100)
AS
BEGIN
  SELECT
    *
  FROM
    books
  WHERE
    primary_author = @PrimaryAuthor;
END
GO

आदर्श रूप से, हम जो करना चाहते हैं वह कुछ इस तरह है, जहां हम SELECT . करते हैं हमारी प्रक्रिया से परिणामी डेटा और इसे एक अस्थायी तालिका में डालें:

SELECT
  *
INTO
  #tmpSortedBooks
FROM
  EXEC BooksByPrimaryAuthor 'Tolkien'

समस्या यह है कि उपरोक्त सिंटैक्स अनुचित है और काम नहीं करेगा . हमें एक नई विधि की आवश्यकता है।

OPENROWSET स्टेटमेंट का उपयोग करना

एक संभावना OPENROWSET . का उपयोग करना है कथन, जो आपको किसी OLE DB स्रोत से दूरस्थ डेटा तक पहुँचने की अनुमति देता है और निष्पादित . किया जा सकता है सीधे किसी अन्य SQL कथन के भीतर से। OPENROWSET एक बार का कनेक्शन और डेटा पुनर्प्राप्ति विधि है, इसलिए इसे बार-बार कनेक्शन के लिए उपयोग नहीं किया जाना चाहिए (उस मामले में सर्वर को लिंक करना बेहतर है)।

OPENROWSET किसी भी INSERT . का लक्ष्य हो सकता है , DELETE , या UPDATE बयान, जो हमारे लिए हमारी संग्रहीत प्रक्रिया को "निष्पादित" करने और उस डेटा को हमारी प्रतीक्षा अस्थायी तालिका में वापस निकालने के हमारे उद्देश्यों के लिए आदर्श बनाता है।

OPENROWSET . का उपयोग करने से पहले , कुछ कॉन्फ़िगरेशन विकल्पों को संशोधित करना आवश्यक हो सकता है, विशेष रूप से तदर्थ पहुंच की अनुमति देकर। इसे निम्नलिखित कथनों का उपयोग करके कॉन्फ़िगर किया जा सकता है:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

अब हम OPENROWSET . का उपयोग कर सकते हैं , जिसका एक विशेष सिंटैक्स है जिसका पालन किया जाना चाहिए:

OPENROWSET(
  <PROVIDER_NAME>,
  <DATA_SOURCE>,
  <OPTIONS>
)

इस प्रकार, हम OPENROWSET . के माध्यम से अपनी संग्रहीत कार्यविधि को निष्पादित कर सकते हैं और इसे हमारी अस्थायी तालिका में इस प्रकार पास करें:

SELECT
  *
INTO
  #tmpSortedBooks
FROM
  OPENROWSET(
    'SQLNCLI',
    'Server=(local)\SQL2008;Trusted_Connection=yes;',
    'EXEC BooksByPrimaryAuthor Tolkien'
)

आपको PROVIDER_NAME बदलने की आवश्यकता हो सकती है और DATA_SOURCE आपके अपने उद्देश्यों के लिए मूल्य।

उपयोगकर्ता-परिभाषित फ़ंक्शन का उपयोग करना

OPENROWSET . में कुछ कमियां हैं विधि, अर्थात् इसके लिए तदर्थ अनुमति/कॉन्फ़िगरेशन की आवश्यकता है जैसा कि हमने ऊपर देखा, और OPENROWSET भी केवल एक परिणाम सेट को वापस करने में सक्षम है (यदि एकाधिक सेट प्रदान किए जाते हैं, तो केवल पहला परिणाम सेट लौटाया जाता है)।

इसलिए, इस कार्य को करने के लिए एक और तरीका यह है कि इसके बजाय संग्रहीत कार्यविधि को प्रभावी ढंग से एक उपयोगकर्ता-परिभाषित फ़ंक्शन के साथ बदल दिया जाए।

हमारे उदाहरण से, यह कुछ इस तरह दिखाई देगा:

CREATE FUNCTION BooksByPrimaryAuthor
(
  @PrimaryAuthor nvarchar(100)
)
RETURNS TABLE
AS
RETURN
  SELECT
    *
  FROM
    books
  WHERE
    primary_author = @PrimaryAuthor;
GO

इस फ़ंक्शन का उपयोग मोटे तौर पर उसी तरह से किया जा सकता है जैसा ऊपर वांछित OPENROWSET . का उपयोग करके किया जा सकता है :

SELECT
  *
INTO
  #tmpSortedBooks
FROM
  BooksByPrimaryAuthor('Tolkien')

इस घटना में कि आपको वास्तव में एक संग्रहीत कार्यविधि की आवश्यकता है, आप अपने फ़ंक्शन को एक संग्रहीत कार्यविधि में भी लपेट सकते हैं।


  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 सर्वर स्वास्थ्य जाँच, भाग 4 :ERRORLOG

  2. SQL सर्वर को समझना ALTER TABLE ADD COLUMN Statement

  3. महत्वपूर्ण SQL डेटाबेस को पुनर्प्राप्त करने के लिए 2020 के लिए सर्वश्रेष्ठ SQL पुनर्प्राप्ति उपकरण

  4. वास्तविक जीवन का उदाहरण, SQL में OUTER / CROSS APPLY का उपयोग कब करें

  5. यहां तीन कारण बताए गए हैं कि आप अपने SQL इंस्टेंस में चरम गतिविधि क्यों देख सकते हैं