2010-02-08 20 views

उत्तर

89

#table स्थानीय को संदर्भित करता है (केवल उस उपयोगकर्ता को दिखाई देता है जिसने इसे बनाया है) अस्थायी तालिका।

##table एक वैश्विक (सभी उपयोगकर्ताओं के लिए दृश्यमान) अस्थायी तालिका को संदर्भित करता है।

@variableName एक चर को संदर्भित करता है जो उसके प्रकार के आधार पर मूल्य रख सकता है।

चियर्स

+19

#table की आपकी परिभाषा पूरी तरह से सही नहीं है। यह उपयोगकर्ता तक सीमित नहीं है बल्कि कनेक्शन के लिए सीमित है। यदि किसी उपयोगकर्ता के पास एकाधिक कनेक्शन हैं तो यह केवल उस स्थान पर दिखाई देगा जो #table को पहली जगह बनाया गया था। –

+0

@DavinStuder ने एक महत्वपूर्ण स्पष्टीकरण की पेशकश की है। उपयोगकर्ता बनाम तालिका के बीच अंतर।केवल मौजूदा कनेक्शन पर दिखाई देने वाली एक तालिका बहुत महत्वपूर्ण है। – mirzmaster

5

# और ## टेबल वास्तविक टेबल अस्थायी डेटाबेस में प्रतिनिधित्व कर रहे हैं। इन तालिकाओं में इंडेक्स और आंकड़े हो सकते हैं, और एक सत्र में स्पॉक्स में पहुंचा जा सकता है (वैश्विक अस्थायी तालिका के मामले में, यह सत्रों में उपलब्ध है)।

@table एक तालिका चर है।

अधिक जानकारी के लिए: http://www.sqlteam.com/article/temporary-tables

+4

और टेबल वैरिएबल tempDB डेटाबेस में भी लाइव होगा, अगर इसका आकार स्मृति में पकड़ने के लिए बहुत बड़ा है। –

+0

सुनिश्चित नहीं है कि आपका उत्तर क्यों वोट दिया गया था, व्हाइनर? मैंने सोचा कि इसमें उपयोगी जानकारी है, खासकर अस्थायी डेटाबेस के बारे में ... –

+0

शायद क्योंकि आलेख में एक त्रुटि है, जो कि उस आलेख के टिप्पणी अनुभाग में इंगित किया गया है। – Alex

22
+4

मुझे एहसास है कि यह बहुत समय पहले से है, लेकिन चूंकि यह एक लिंक-केवल उत्तर है (और पहला लिंक मर चुका है), क्या इसे प्रत्येक लिंक से मुख्य टेकवेज़ के साथ अपडेट किया जा सकता है? –

6

मैं # टेबल और @table के बीच मतभेद पर ध्यान केंद्रित करेंगे पर एक नज़र डालें। ## तालिका एक वैश्विक अस्थायी तालिका है और SQL सर्वर का उपयोग करने के 10 से अधिक वर्षों में रिकॉर्ड के लिए मुझे अभी तक एक वैध उपयोग मामले में आना बाकी है। मुझे यकीन है कि कुछ मौजूद हैं लेकिन वस्तु की प्रकृति इसे अत्यधिक उपयोग करने योग्य IMHO बनाती है।

@marc_s द्वारा @whiner की प्रतिक्रिया बिल्कुल सही है: यह एक प्रचलित मिथक है कि तालिका चर हमेशा स्मृति में रहते हैं। डिस्क तालिका में डिस्क पर जाने और एक अस्थायी तालिका की तरह काम करने के लिए यह वास्तव में काफी आम है।

वैसे भी मैं @Astander द्वारा दिए गए लिंक का पालन करके मतभेदों के सेट पर पढ़ने का सुझाव देता हूं। अधिकांश अंतर में सीमाएं शामिल हैं जो आप @table चर के साथ नहीं कर सकते हैं।

+0

मेरे पास 5 अलग-अलग संग्रहीत प्रक्रिया है जो गणना के विभिन्न हिस्सों को निष्पादित करती हैं और एकल परिणाम आउटपुट करती हैं। लेखा परीक्षा के लिए मैं मध्यवर्ती मूल्य देखना चाहता हूं और लेखा परीक्षक भी करता है। मैंने कुछ प्रक्रियाओं को ## टेम्पल टेबल पर डंप करने के लिए अपनी प्रक्रियाओं को समायोजित किया ताकि हम दोनों उन्हें देख सकें लेकिन उन्हें बनाए रखा नहीं जाता है (उन्हें ऑडिट के दौरान केवल आवश्यकता होती है)। आपके लिए एक वैध उपयोग केस है (IMHO!)। – RyanfaeScotland

+0

@Ryan क्यों ## तालिका मान्य है जब आप dbo का उपयोग कर सकते थे। टिकाऊ? जब आप अपने द्वारा किए गए सभी को एक डीआरओपी स्टेटमेंट टाइप करने से बचाया जाता है तो मैं इसे वैध उपयोग केस नहीं मानता। –

+2

मैं अपने डीबी पर ऑडिटर डीआरओपी अनुमतियां नहीं देना चाहता हूं। मैं भी वापस आने और साफ होने के बाद साफ नहीं होना चाहता हूं। एक अस्थायी तालिका के साथ वह जितनी बार चाहें उतनी बार क्वेरी चला सकता है और मुझे पता है कि जब वह किया जाता है तो वह डीबी में पदचिह्न नहीं छोड़ रहा है। – RyanfaeScotland

4
CREATE TABLE #t 

एक तालिका पर और उस संबंध एक ही उपयोगकर्ता के लिए जो बनाता है एक और कनेक्शन अन्य कनेक्शन से तालिका #t को देखने के लिए सक्षम नहीं होगा के दौरान ही दिखाई दे रहा है बनाता है।

CREATE TABLE ##t 

अन्य कनेक्शनों के लिए दृश्यमान एक अस्थायी तालिका बनाता है। लेकिन निर्माण कनेक्शन समाप्त होने पर तालिका गिरा दी जाती है।

0

यदि आप एक अद्वितीय वैश्विक अस्थायी तालिका की जरूरत है, एक uniqueidentifier उपसर्ग/प्रत्यय के साथ अपने स्वयं बना सकते हैं और पोस्ट निष्पादन ड्रॉप करता है, तो एक object_id अगर (.... केवल दोष यह गतिशील एसक्यूएल का उपयोग कर और स्पष्ट रूप से छोड़ने की ज़रूरत है।

संबंधित मुद्दे