SQL सर्वर में, एक अस्थायी तालिका एक निश्चित प्रकार की तालिका है जो तब तक मौजूद रहती है जब तक कि यह गुंजाइश से बाहर न हो जाए (जब तक कि इसे स्पष्ट रूप से नहीं छोड़ा जाता)।
यह एक नियमित (निरंतर) तालिका से अलग है, जहां नियमित तालिका आपके डेटाबेस में स्थायी रूप से तब तक मौजूद रहती है जब तक कि आप इसे स्पष्ट रूप से छोड़ नहीं देते।
अस्थायी तालिकाओं के लाभ
अस्थायी तालिकाएँ उस समय उपयोगी हो सकती हैं जब आपको बड़े परिणाम सेट के सबसेट के विरुद्ध एकाधिक क्वेरी चलाने की आवश्यकता होती है। आप SELECT... INTO
. का उपयोग कर सकते हैं एक WHERE
. के साथ डेटा के सबसेट को अस्थायी तालिका में रखने के लिए क्लॉज। फिर आप उस अस्थायी तालिका के विरुद्ध क्वेरी चला सकते हैं। यह आपको एकाधिक क्वेरी करते समय बड़े परिणाम सेट से डेटा को लगातार फ़िल्टर करने से बचाता है।
अनुमतियों के दृष्टिकोण से अस्थायी तालिकाएँ भी उपयोगी हो सकती हैं। यदि आपको लगातार तालिका से डेटा के साथ काम करने की आवश्यकता है, लेकिन आपके पास आवश्यक सभी कार्यों को करने के लिए पर्याप्त अनुमतियां नहीं हैं, तो आप उस डेटा को एक अस्थायी तालिका में कॉपी कर सकते हैं (यह मानते हुए कि आपके पास पढ़ने की पहुंच है) और आपको जो कुछ भी करने की आवश्यकता है वह करें .
यदि आपके पास वर्तमान डेटाबेस में एक (स्थायी) तालिका बनाने की अनुमति नहीं है, तो अस्थायी तालिकाओं का भी उपयोग किया जा सकता है।
अस्थायी तालिकाओं का एक अन्य उपयोगी पहलू यह है कि आप उनका उपयोग परीक्षण चलाते समय त्वरित तदर्थ प्रश्नों को चलाने, अवधारणा प्रदर्शित करने आदि के लिए कर सकते हैं, बिना इस बात की चिंता किए कि आप लगातार टेबल छोड़ना भूल गए हैं।
TempDB
अस्थायी तालिकाएं TempDB . में बनाई जाती हैं डेटाबेस। यह एक सिस्टम डेटाबेस है जो अस्थायी उपयोगकर्ता ऑब्जेक्ट जैसे अस्थायी टेबल और इंडेक्स, अस्थायी संग्रहीत कार्यविधियाँ, तालिका चर, तालिका-मूल्यवान फ़ंक्शंस में लौटाई गई तालिकाएँ और कर्सर संग्रहीत करता है। यह डेटाबेस इंजन द्वारा बनाई गई आंतरिक वस्तुओं को भी संग्रहीत करता है, और संस्करण स्टोर करता है।
कोई भी उपयोगकर्ता TempDB . में अस्थायी तालिकाएँ बना सकता है . आपको TempDB . के लिए किसी विशेष अनुमति को कॉन्फ़िगर करने की आवश्यकता नहीं है पहुंच।
सिंटैक्स
नियमित तालिकाओं के समान सिंटैक्स का उपयोग करके अस्थायी तालिकाएँ बनाई जाती हैं। अंतर यह है कि अस्थायी तालिकाओं के पहले एक या दो अंक चिह्न होते हैं (#
):
- स्थानीय अस्थायी तालिकाओं के पहले एक संख्या का चिह्न लगा होता है (उदा.,
#table_name
) - वैश्विक अस्थायी तालिकाओं के पहले दो अंकों का चिह्न लगा होता है (उदा.,
##table_name
)
स्थानीय . बनाने का उदाहरण अस्थायी तालिका:
CREATE TABLE #LocalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
वैश्विक . बनाने का उदाहरण अस्थायी तालिका:
CREATE TABLE ##GlobalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
स्थानीय अस्थायी तालिकाएँ केवल वर्तमान सत्र में दिखाई देती हैं, और वैश्विक अस्थायी तालिकाएँ सभी सत्रों के लिए दृश्यमान होती हैं।
अस्थायी तालिका कितने समय तक चलती है?
अस्थायी तालिकाओं को स्वचालित रूप से हटा दिया जाता है जब वे दायरे से बाहर हो जाते हैं।
आप DROP TABLE
. का उपयोग करके एक अस्थायी तालिका को स्पष्ट रूप से छोड़ भी सकते हैं .
जब कोई अस्थायी तालिका स्वचालित रूप से गिराई जाती है, तो यह इस बात पर निर्भर करता है कि अस्थायी तालिका स्थानीय है या वैश्विक, और यह संग्रहीत प्रक्रिया में बनाई गई है या नहीं।
- स्थानीय :संग्रहीत कार्यविधि के समाप्त होने पर संग्रहीत कार्यविधि में बनाई गई स्थानीय अस्थायी तालिका स्वचालित रूप से हटा दी जाती है। तालिका को तालिका बनाने वाली संग्रहीत कार्यविधि द्वारा निष्पादित किसी भी नेस्टेड संग्रहीत कार्यविधियों द्वारा संदर्भित किया जा सकता है। तालिका को उस प्रक्रिया द्वारा संदर्भित नहीं किया जा सकता है जिसे तालिका बनाने वाली संग्रहीत कार्यविधि कहा जाता है।
वर्तमान सत्र के अंत में अन्य सभी स्थानीय अस्थायी तालिकाओं को स्वचालित रूप से हटा दिया जाता है।
- वैश्विक :जब तालिका बनाने वाला सत्र समाप्त होता है और अन्य सभी कार्यों ने उन्हें संदर्भित करना बंद कर दिया है, तो वैश्विक अस्थायी तालिकाएँ स्वचालित रूप से हटा दी जाती हैं। एक कार्य और एक तालिका के बीच संबंध केवल एक टी-एसक्यूएल कथन के जीवन के लिए बनाए रखा जाता है। इसका मतलब यह है कि पिछले टी-एसक्यूएल स्टेटमेंट के पूरा होने पर एक वैश्विक अस्थायी तालिका गिरा दी जाती है जो सक्रिय रूप से तालिका को संदर्भित कर रही थी जब निर्माण सत्र समाप्त हो गया था।
स्कीमा
सभी अस्थायी तालिकाएं dbo . में बनाई जाती हैं स्कीमा। यदि आप स्पष्ट रूप से कोई भिन्न स्कीमा निर्दिष्ट करते हैं, तो इसे अनदेखा कर दिया जाता है।
विदेशी कुंजी
अस्थायी तालिकाओं पर विदेशी कुंजी बाधाओं को लागू नहीं किया जाता है। यदि आप एक विदेशी कुंजी निर्दिष्ट करते हैं, तो तालिका अभी भी बनाई गई है, बिना किसी विदेशी कुंजी के। आपको इसकी सलाह देते हुए एक संदेश वापस किया जाएगा।