SQL सर्वर में एक अस्थायी तालिका, जैसा कि नाम से पता चलता है, एक डेटाबेस तालिका है जो अस्थायी रूप से डेटाबेस सर्वर पर मौजूद होती है। एक अस्थायी तालिका एक निश्चित अवधि के लिए सामान्य तालिका से डेटा का सबसेट संग्रहीत करती है।
अस्थायी तालिकाएँ विशेष रूप से तब उपयोगी होती हैं जब आपके पास किसी तालिका में बड़ी संख्या में रिकॉर्ड होते हैं और आपको बार-बार उन अभिलेखों के एक छोटे उपसमुच्चय के साथ सहभागिता करने की आवश्यकता होती है। ऐसे मामलों में सबसेट लाने के लिए डेटा को बार-बार फ़िल्टर करने के बजाय, आप डेटा को एक बार फ़िल्टर कर सकते हैं और इसे एक अस्थायी तालिका में संग्रहीत कर सकते हैं। फिर आप अपने प्रश्नों को उस अस्थायी तालिका पर निष्पादित कर सकते हैं। अस्थायी तालिकाओं को "tempdb" के अंदर संग्रहीत किया जाता है जो एक सिस्टम डेटाबेस है। आइए एक नज़र डालते हैं कि आप एक साधारण परिदृश्य में अस्थायी डेटा का उपयोग कैसे कर सकते हैं।
डेटा तैयार करना
आइए पहले कुछ डमी डेटा तैयार करें। हम इस डेटा का उपयोग अस्थायी टेबल बनाने के लिए करेंगे।
अपने डेटाबेस सर्वर पर निम्न स्क्रिप्ट चलाएँ।
CREATE DATABASE schooldb CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender VARCHAR(50) NOT NULL, age INT NOT NULL, total_score INT NOT NULL, ) INSERT INTO student VALUES (1, 'Jolly', 'Female', 20, 500), (2, 'Jon', 'Male', 22, 545), (3, 'Sara', 'Female', 25, 600), (4, 'Laura', 'Female', 18, 400), (5, 'Alan', 'Male', 20, 500), (6, 'Kate', 'Female', 22, 500), (7, 'Joseph', 'Male', 18, 643), (8, 'Mice', 'Male', 23, 543), (9, 'Wise', 'Male', 21, 499), (10, 'Elis', 'Female', 27, 400);
उपरोक्त SQL स्क्रिप्ट एक डेटाबेस 'schooldb' बनाती है। इस डेटाबेस में, 'स्टूडेंट' नामक एक टेबल बनाई जाती है और कुछ डमी डेटा को टेबल में जोड़ा जाता है।
अस्थायी तालिका बनाना
अस्थायी तालिकाएँ बनाने की दो विधियाँ हैं।
विधि 1
एक अस्थायी तालिका बनाने का सबसे आसान तरीका एक चयन क्वेरी के भीतर एक INTO कथन का उपयोग करना है। आइए एक अस्थायी तालिका बनाएं जिसमें छात्र तालिका से सभी पुरुष छात्र रिकॉर्ड का नाम, आयु और लिंग शामिल हो।
USE schooldb; SELECT name, age, gender INTO #MaleStudents FROM student WHERE gender = 'Male'
उपरोक्त क्वेरी पर एक नज़र डालें। यहां हमने एक अस्थायी तालिका "#MaleStudents" बनाई है जो छात्र तालिका से सभी पुरुष छात्र रिकॉर्ड के नाम, आयु और लिंग को संग्रहीत करती है। एक अस्थायी तालिका को परिभाषित करने के लिए, हम सेलेक्ट स्टेटमेंट के बाद INTO स्टेटमेंट का उपयोग करते हैं। अस्थायी तालिका का नाम हैश (#) से शुरू होना चाहिए।
अब, यह देखने के लिए कि यह तालिका कहाँ मौजूद है; "ऑब्जेक्ट एक्सप्लोरर -> डेटाबेस -> सिस्टम डेटाबेस-> tempdb -> अस्थायी तालिका" पर जाएं। आप पहचानकर्ता के साथ अपना अस्थायी तालिका नाम देखेंगे। निम्न आकृति पर एक नज़र डालें:
आप टेबल नाम के अंत में "00000000000006" के बारे में सोच रहे होंगे। यह एक विशिष्ट पहचानकर्ता है। एकाधिक डेटाबेस कनेक्शन एक ही नाम के साथ अस्थायी तालिकाएँ बना सकते हैं, इसलिए विभिन्न कनेक्शनों द्वारा बनाई गई अस्थायी तालिकाओं के बीच अंतर करने के लिए, डेटाबेस सर्वर स्वचालित रूप से अंत में इस विशिष्ट पहचानकर्ता को जोड़ देता है।
आप अस्थायी तालिका पर उसी कनेक्शन के माध्यम से संचालन कर सकते हैं जिसने इसे बनाया है। इसलिए, उसी क्वेरी विंडो में जिसने “#MaleStudents” तालिका बनाई है, निम्न क्वेरी निष्पादित करें।
SELECT * FROM #MaleStudents
चूंकि, #MaleStudents तालिका में सभी पुरुष छात्रों का नाम, आयु और लिंग होता है। उपरोक्त क्वेरी निम्नलिखित परिणाम प्राप्त करेगी।
[टेबल आईडी=15 /]
एक नया कनेक्शन बनाने के लिए आप बस "SQL सर्वर प्रबंधन स्टूडियो" में एक नई क्वेरी विंडो खोल सकते हैं। अब, पिछले कनेक्शन को खुला रखें और एक नई क्वेरी विंडो (नया कनेक्शन) में विधि 2 का उपयोग करके एक और "पुरुष छात्र" तालिका बनाएं।
विधि 2
दूसरी विधि सामान्य तालिकाएँ बनाने के समान है। निम्नलिखित क्वेरी पर एक नज़र डालें। यहां फिर से, हम #MaleStudents अस्थायी तालिका बनाएंगे। याद रखें, इस क्वेरी को एक नए कनेक्शन द्वारा निष्पादित किया जाना चाहिए।
USE schooldb; CREATE TABLE #MaleStudents ( name VARCHAR(50), age int, gender VARCHAR (50) ) INSERT INTO #MaleStudents SELECT name, age, gender FROM student WHERE gender = 'Male'
अब, यदि आप उपरोक्त क्वेरी को निष्पादित करते हैं, तो आपको दो #MaleStudents अस्थायी तालिकाओं को अलग-अलग विशिष्ट पहचानकर्ताओं के साथ tempdb के अंदर देखना चाहिए। ऐसा इसलिए है क्योंकि इन दो तालिकाओं को दो अलग-अलग कनेक्शनों द्वारा बनाया गया है। निम्न स्क्रीनशॉट पर एक नज़र डालें।
वैश्विक अस्थायी तालिकाएं
यहां यह उल्लेख करना उचित है कि, एक अस्थायी तालिका केवल उस कनेक्शन के लिए सुलभ है जिसने उस अस्थायी तालिका को बनाया है। यह अन्य कनेक्शनों के लिए सुलभ नहीं है। हालाँकि, हम अस्थायी तालिकाएँ बना सकते हैं जो सभी खुले कनेक्शनों के लिए सुलभ हैं। ऐसी अस्थायी तालिकाओं को वैश्विक अस्थायी तालिकाएँ कहा जाता है। वैश्विक अस्थायी तालिका का नाम डबल हैश प्रतीक (##) से शुरू होता है। आइए एक वैश्विक अस्थायी तालिका बनाएं जिसमें छात्र तालिका से सभी महिला छात्रों के रिकॉर्ड हों।
USE schooldb; SELECT name, age, gender INTO ##FemaleStudents FROM student WHERE gender = 'Female'
अब, आप किसी भी खुले कनेक्शन से ##FemaleStudents तालिका तक पहुंच सकते हैं।
अस्थायी तालिका हटाना
SQL सर्वर में अस्थायी तालिकाओं को हटाने के दो तरीके हैं:स्वचालित हटाना और मैन्युअल हटाना।
स्वचालित विलोपन
एक अस्थायी तालिका स्वचालित रूप से हटा दी जाती है जब तालिका बनाने वाला कनेक्शन बंद हो जाता है। वैकल्पिक रूप से, जब आप अस्थायी तालिका बनाने वाली क्वेरी विंडो को बंद करते हैं, तो परिवर्तनों को सहेजे बिना तालिका बंद हो जाएगी। यदि कोई कनेक्शन वैश्विक तालिका पर कुछ प्रश्नों को निष्पादित कर रहा है, तो वैश्विक तालिका को हटाने से पहले उन प्रश्नों को पहले पूरा करना होगा।
मैन्युअल तालिका हटाना
आप DROP TABLE स्टेटमेंट का उपयोग करके कनेक्शन बंद किए बिना किसी तालिका को मैन्युअल रूप से हटा सकते हैं। हालाँकि, याद रखें कि कथन को उस कनेक्शन द्वारा निष्पादित किया जाना है जिसने वास्तव में तालिका बनाई थी। निम्न क्वेरी पर एक नज़र डालें:
DROP TABLE #MaleStudents
यह एक सामान्य तालिका को हटाने के समान है।
अस्थायी टेबल और संग्रहित प्रक्रियाएं
पहले हमने सीखा था कि एक अस्थायी तालिका को केवल उस कनेक्शन के अंदर ही एक्सेस किया जा सकता है जिसने इसे बनाया है। उस नियम का एक अपवाद है। जब आप संग्रहीत कार्यविधियाँ बना रहे होते हैं, तो आप अन्य कनेक्शनों में भी अस्थायी तालिकाओं तक पहुँच सकते हैं।
आइए दो अलग-अलग कनेक्शनों का उपयोग करके दो संग्रहीत कार्यविधियाँ बनाएँ। पहली संग्रहित प्रक्रिया #MaleStudents तालिका में डेटा सम्मिलित करेगी, जबकि दूसरी तालिका से डेटा का चयन करेगी।
एक नया कनेक्शन बनाएं। यदि आप SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर रहे हैं, तो आप एक नई क्वेरी विंडो खोलकर ऐसा कर सकते हैं। नई क्वेरी विंडो में निम्न SQL स्क्रिप्ट निष्पादित करें।
Create Procedure spInsertStudent (@Name Varchar(50), @Age int, @Gender Varchar(50)) As Begin Insert Into #MaleStudents Values (@Name, @Age, @Gender) End
हमने अब एक संग्रहीत कार्यविधि बनाई है जो #MaleStudent अस्थायी तालिका में एक रिकॉर्ड सम्मिलित करती है। ध्यान दें कि इस कनेक्शन ने #MaleStudent नहीं बनाया, फिर भी हम इसमें एक रिकॉर्ड डालकर इसे एक्सेस कर रहे हैं। ऐसा इसलिए है क्योंकि संग्रहीत कार्यविधि बनाते समय आप तालिका बनाने वाले कनेक्शन के अलावा किसी अन्य कनेक्शन से अस्थायी तालिकाओं तक पहुंच सकते हैं। यदि आप उपरोक्त क्वेरी को निष्पादित करते हैं, तो आप देखेंगे कि SQL सर्वर कोई त्रुटि नहीं देगा।
इसी तरह, एक नया कनेक्शन खोलें और उसमें निम्न संग्रहीत कार्यविधि बनाएं:
CREATE PROCEDURE spListStudent AS BEGIN SELECT * FROM #MaleStudents ORDER BY name END
उपरोक्त संग्रहीत प्रक्रिया #MaleStudents अस्थायी तालिका से सभी रिकॉर्ड का चयन करती है। यहां फिर से, हम एक कनेक्शन के अंदर एक अस्थायी तालिका का उपयोग कर रहे हैं जिसने तालिका नहीं बनाई।
अब यहाँ मुश्किल हिस्सा है। यद्यपि आप संग्रहीत कार्यविधि बनाते समय किसी अन्य कनेक्शन के अंदर एक अस्थायी तालिका तक पहुँच सकते हैं, आप किसी अन्य कनेक्शन के अंदर संग्रहीत कार्यविधि को "निष्पादित" करते समय एक अस्थायी तालिका तक नहीं पहुँच सकते। एक अस्थायी तालिका तक पहुँचने वाली संग्रहीत कार्यविधि को निष्पादित करने के लिए, आपको उस कनेक्शन के अंदर होना होगा जिसने अस्थायी तालिका बनाई है।
इसलिए, #MaleStudents तालिका बनाने वाले कनेक्शन के अंदर निम्नलिखित प्रश्नों को निष्पादित करें।
EXECUTE spInsertStudent Bradley, 45, Male Execute spListStudent
यहां पहली संग्रहीत प्रक्रिया नाम के साथ एक नया छात्र रिकॉर्ड सम्मिलित करती है:ब्रैडली, आयु:45 और लिंग:पुरुष #MaleStudents तालिका में। दूसरी संग्रहीत प्रक्रिया नाम के आरोही क्रम में #MaleStudents तालिका से सभी रिकॉर्ड का चयन करती है। उपरोक्त संग्रहीत कार्यविधियों का आउटपुट होगा:
[टेबल आईडी=16 /]
आप ऊपर चयनित रिकॉर्ड में हमारे नए सम्मिलित रिकॉर्ड को स्पष्ट रूप से देख सकते हैं।
यह भी देखें:
SQL सर्वर में तालिका चर का प्रदर्शन
पेश है SQL सर्वर में कॉमन टेबल एक्सप्रेशंस