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

संग्रहीत प्रक्रियाओं के लिए पैरामीटर के रूप में डेटा तालिका पास करना

वास्तविक दुनिया के डेटाबेस अनुप्रयोगों को सभी प्रकार के कार्यों को करने के लिए फ्रंट एंड से डेटाबेस तक कई अनुरोध करने की आवश्यकता होती है।

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

तालिका-मूल्यवान पैरामीटर एक तालिका प्रकार वाला पैरामीटर है। इस पैरामीटर का उपयोग करके, आप डेटा की कई पंक्तियों को एक संग्रहीत कार्यविधि या एक पैरामीटरयुक्त SQL कमांड को तालिका के रूप में भेज सकते हैं। Transact-SQL का उपयोग तालिका-मूल्यवान पैरामीटर के कॉलम मानों तक पहुंचने के लिए किया जा सकता है।

इस लेख में, हम अध्ययन करेंगे कि हम डेटा तालिका को संग्रहीत प्रक्रिया में कैसे पास कर सकते हैं। हालांकि, इससे पहले आइए देखें कि टेबल-वैल्यू पैरामीटर से पहले टेबल डेटा कैसे पास किया जाता था।

टेबल वैल्यूड पैरामीटर्स से पहले टेबल फॉर्म में डेटा पास करना

SQL सर्वर 2008 में तालिका-मूल्यवान पैरामीटर पेश किए गए थे। इससे पहले, संग्रहित प्रक्रियाओं में सारणीबद्ध डेटा पास करने के लिए सीमित विकल्प थे। अधिकांश डेवलपर्स ने निम्न विधियों में से एक का उपयोग किया:

  1. कई स्तंभों और पंक्तियों में डेटा को मापदंडों की एक श्रृंखला के रूप में दर्शाया गया था। हालाँकि, SQL सर्वर संग्रहीत कार्यविधि में पारित किए जा सकने वाले मापदंडों की अधिकतम संख्या 2,100 है। इसलिए, एक बड़ी तालिका के मामले में, इस पद्धति का उपयोग नहीं किया जा सकता है। इसके अलावा अलग-अलग मापदंडों को एक सारणीबद्ध रूप में प्रारूपित करने के लिए सर्वर साइड पर प्रीप्रोसेसिंग की आवश्यकता होती है।
  2. एक से अधिक SQL स्टेटमेंट बनाएं जो कई पंक्तियों को प्रभावित कर सकते हैं, जैसे UPDATE। विवरण सर्वर को व्यक्तिगत रूप से या बैच रूप में भेजे जा सकते हैं। भले ही उन्हें बैच के रूप में भेजा जाता है, स्टेटमेंट सर्वर पर अलग-अलग निष्पादित होते हैं।
  3. एक और तरीका है कि कई पंक्तियों और स्तंभों से डेटा को बंडल करने के लिए सीमांकित स्ट्रिंग्स या XML दस्तावेज़ों का उपयोग करें और फिर इन टेक्स्ट मानों को पैरामीटरयुक्त SQL कथनों या संग्रहीत प्रक्रियाओं में पास करें। इस दृष्टिकोण का दोष यह था कि मूल्यों को अलग करने के लिए आपको डेटा संरचना को मान्य करने की आवश्यकता थी।

डेटा तालिका को संग्रहीत कार्यविधियों में पैरामीटर के रूप में पास करना

अब देखते हैं कि पिछले अनुभाग में चर्चा की गई किसी भी समस्या का सामना किए बिना संग्रहीत प्रक्रिया में डेटा भेजने के लिए तालिका-मूल्यवान पैरामीटर का उपयोग कैसे किया जा सकता है। तालिका-मूल्यवान पैरामीटर डेटा की कई पंक्तियों को कुछ ट्रांजैक्ट-एसक्यूएल कोड या फ्रंट-एंड एप्लिकेशन से संग्रहीत प्रक्रिया में पारित करने की अनुमति देते हैं। तालिका-मान पैरामीटर का अधिकतम आकार डेटाबेस सर्वर के अधिकतम मेमोरी आकार के बराबर हो सकता है।

इस खंड में, हम डेटा तालिका में एकाधिक पंक्तियों को सम्मिलित करने के लिए संग्रहीत कार्यविधि के साथ तालिका-मूल्यवान पैरामीटर का उपयोग करेंगे।

तालिका-मूल्यवान पैरामीटर को संग्रहीत कार्यविधि में पास करना एक तीन-चरणीय प्रक्रिया है:

  1. एक उपयोगकर्ता-परिभाषित तालिका प्रकार बनाएं जो उस तालिका से मेल खाती हो जिसे आप पॉप्युलेट करना चाहते हैं।
  2. उपयोगकर्ता द्वारा परिभाषित तालिका को एक पैरामीटर के रूप में संग्रहीत कार्यविधि में पास करें
  3. संग्रहीत प्रक्रिया के अंदर, पारित पैरामीटर से डेटा का चयन करें और इसे उस तालिका में डालें जिसे आप पॉप्युलेट करना चाहते हैं।

आइए एक उदाहरण पर एक नज़र डालते हैं कि हम टेबल वैल्यू फ़ंक्शन का उपयोग करके डेटा तालिका को संग्रहीत कार्यविधि में कैसे पास कर सकते हैं।

सबसे पहले, एक टेबल बनाएं जिसे हम पॉप्युलेट करना चाहते हैं। निम्न स्क्रिप्ट निष्पादित करें:

CREATE DATABASE ShowRoom


USE ShowRoom
Create Table Cars
(
    Id int primary key,
    Name nvarchar(50),
    company nvarchar(50)
)
Go

ऊपर की लिपि में, हम शोरूम नामक एक डेटाबेस बनाते हैं जिसमें एक टेबल यानी कार होती है। कार टेबल में तीन कॉलम होते हैं:आईडी, नाम और कंपनी। हम Cars तालिका को भरने के लिए एक संग्रहीत कार्यविधि का उपयोग करेंगे।

जैसा कि पहले बताया गया है, पहला कदम एक उपयोगकर्ता-परिभाषित तालिका प्रकार बनाना है जो उस तालिका से मेल खाती है जिसे आप पॉप्युलेट करना चाहते हैं। ऐसा करने के लिए निम्न स्क्रिप्ट निष्पादित करें:

CREATE TYPE CarTableType AS TABLE
(
     Id int primary key,
    Name nvarchar(50),
    company nvarchar(50)
)
Go

उपरोक्त लिपि में, हम तालिका प्रकार के CarTableType उपयोगकर्ता-परिभाषित चर बनाते हैं। यह वेरिएबल है जिसे हम संग्रहित प्रक्रिया में पास करेंगे। यह देखा जा सकता है कि CarTableType वेरिएबल के कॉलम Cars टेबल के कॉलम के समान हैं।

अब एक संग्रहित प्रक्रिया बनाते हैं जो CarTableType चर को एक पैरामीटर के रूप में स्वीकार करती है। संग्रहीत प्रक्रिया के अंदर, हम इस चर से सभी रिकॉर्ड का चयन करेंगे और उन्हें कार तालिका में सम्मिलित करेंगे। ऐसी संग्रहीत कार्यविधि बनाने के लिए निम्न स्क्रिप्ट निष्पादित करें:

CREATE PROCEDURE spInsertCars
@CarType CarTableType READONLY
AS
BEGIN
    INSERT INTO Cars
    SELECT * FROM @CarType
END

उपरोक्त स्क्रिप्ट में, हम spInsertCars संग्रहीत कार्यविधि बनाते हैं। यह उल्लेख करना महत्वपूर्ण है कि आपको उपयोगकर्ता द्वारा परिभाषित पैरामीटर को संग्रहीत प्रक्रिया के अंदर केवल पढ़ने के लिए निर्दिष्ट करना होगा, ऐसा करने में विफल रहने से रनटाइम त्रुटि होती है।

आप देख सकते हैं कि spInsertCars संग्रहीत कार्यविधि CarTableType पैरामीटर को स्वीकार करती है और इसे CarTableType प्रकार के @CarType चर को असाइन करती है।

अंतिम चरण CarTableType चर का एक चर बनाना है, इसे डमी डेटा के साथ पॉप्युलेट करना और इसे spInsertCars संग्रहीत प्रक्रिया में पास करना है। निम्नलिखित स्क्रिप्ट पर एक नज़र डालें:

DECLARE @CarTableType CarTableType

INSERT INTO @CarTableType VALUES (1, 'Corrolla', 'Toyota')
INSERT INTO @CarTableType VALUES (2, 'Civic', 'Honda')
INSERT INTO @CarTableType VALUES (3, '6', 'Audi')
INSERT INTO @CarTableType VALUES (4, 'c100', 'Mercedez')
INSERT INTO @CarTableType VALUES (5, 'Mustang', 'Ford')

EXECUTE spInsertCars @CarTableType

ऊपर की स्क्रिप्ट में, हम सबसे पहले CarTableType प्रकार के @CarTableType वेरिएबल की घोषणा करते हैं। फिर हम इस वेरिएबल में 5 डमी रिकॉर्ड डालते हैं। अंत में, हम spInsertCars संग्रहीत कार्यविधि निष्पादित करते हैं और इसे पैरामीटर के रूप में @CarTableType चर पास करते हैं।

संग्रहीत प्रक्रिया के अंदर, @CarTableType चर से पांच रिकॉर्ड चुने जाते हैं और कार तालिका में डाले जाते हैं। अब यदि आप कार टेबल से सभी रिकॉर्ड्स का चयन करते हैं, तो आपको नए डाले गए रिकॉर्ड्स देखने चाहिए। ऐसा करने के लिए निम्न स्क्रिप्ट निष्पादित करें:

SELECT * FROM Cars

ऊपर की स्क्रिप्ट का आउटपुट इस तरह दिखता है:

आउटपुट से यह देखा जा सकता है कि @CarTableType वेरिएबल के सभी रिकॉर्ड Cars टेबल में डाले गए हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक्सएमएल प्रदर्शन युक्तियाँ

  2. लूप के बिना एक सेट या अनुक्रम उत्पन्न करें - भाग 2

  3. SQL ग्रुप बाय स्टेटमेंट का उपयोग क्या है?

  4. एसक्यूएल ऑपरेटर्स

  5. उपयोग संकेत और DISABLE_OPTIMIZED_NESTED_LOOP