क्या दो सत्र समान नाम के साथ # तालिका बना सकते हैं?


17

मैं एक अस्थायी तालिका ( #myTable) बना रहा हूं और एक कर्सर का उपयोग कर रहा हूं । क्या यह समस्या तब पैदा होती है जब समवर्ती उपयोगकर्ता मेरे एप्लिकेशन के माध्यम से कर्सर तक पहुंच रहे हैं? क्या यह मुझे एक ही नाम के साथ अलग अस्थायी सारणी बनाने की अनुमति देता है?

निम्नलिखित नमूना कोड है:

Open cursor;
Fetch Next from cursor into @Variable_Temp_Table_Name;
Create table #myTable(pk int)
While @@Fetch_Status = 0
Begin    
Fetch Next from cursor into @Variable_Temp_Table_Name;
End 

जवाबों:


20

SQL सर्वर हमेशा एक अस्थायी तालिका नाम (पर्दे के पीछे) के अंत में कुछ यादृच्छिक संख्या को जोड़ते हैं, जब समवर्ती उपयोगकर्ता एक ही नाम के साथ अपने सत्रों में अस्थायी तालिकाओं का निर्माण करते हैं, sql सर्वर tempdb में कई अस्थायी तालिकाएँ बनाएगा।

मैंने #TempTableअपने SSMS में तीन अलग-अलग सत्रों में 3 टेम्प टेबलों का निर्माण किया , अब अगर मैं tempdb पर जाऊं तो मैं प्रत्येक अस्थायी तालिका के नाम के साथ यादृच्छिक (अद्वितीय) स्ट्रिंग के साथ वहां बनाए गए अस्थायी तालिकाओं को देख सकता हूं।

यहाँ छवि विवरण दर्ज करें


11

हां, कई एप्लिकेशन को # टेबल की अपनी प्रतियां मिलेंगी। यह एक # टेबल का उपयोग करने का बिंदु है, क्योंकि प्रत्येक समवर्ती सत्र की अपनी, पृथक वस्तु है। इसका इस बात से कोई लेना-देना नहीं है कि आप अपनी # टेबल के साथ संयोजन में कर्सर का उपयोग कर रहे हैं (हालांकि मुझे संदेह है कि कर्सर को वैसे भी ज़रूरत नहीं है - आपने विशेष रूप से टिप्पणी करने के लिए पर्याप्त कोड शामिल नहीं किया है)।

टिप्पणी शामिल करने के लिए संपादित करें:

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


7
# टैम्प टेबल का उपयोग करने के बारे में एक अतिरिक्त बात यह है कि यदि आपको इसमें अवरोध जोड़ने की आवश्यकता है तो SQL सर्वर को नाम उत्पन्न करने दें अन्यथा भले ही तालिका सत्र के लिए अद्वितीय हो लेकिन बाधा नहीं बनेगी और दूसरा उदाहरण त्रुटि उत्पन्न करने में होगा। तालिका।
हारून

1
@Aaron - सुझाव दें कि आप उत्तर में अनाम बाधाओं पर टिप्पणी को आगे बढ़ाते हैं। बहुत से लोग उस विस्तार पर गड़बड़ करते हैं।
RLF

यह भी ध्यान रखें कि अगर कोई करता है एक वैश्विक अस्थायी तालिका चाहते हैं, वे इसे घोषणा कर सकते हैं ##likeThis
अंडरस्कोर_ड 20

@RLF और हारून: कोई हमेशा NEWID () के साथ एक GUID उत्पन्न कर सकता है और गतिशील SQL के माध्यम से अवरोध पैदा कर सकता है। यह नहीं कह रहा है कि इसे बनाने के लिए टेट कथन में उतना ही साफ है, लेकिन यह कम से कम एक विकल्प है। और मैं यह भी मानता हूं कि FK बाधाओं को अस्थायी तालिकाओं पर अनुमति नहीं है (जब तक हम उदारतापूर्वक बाधाओं की बात कर रहे हैं)।
सोलोमन रुट्ज़की

@srutzky - सच है, लेकिन नामित बाधाओं को आमतौर पर नाम दिया जाता है ताकि कोड से उन्हें संदर्भित करना आसान हो सके। NEWID () का उपयोग करने से वह सरलीकरण नहीं होगा, हालाँकि आप NEWID को खोजने के लिए क्वेरी कर सकते हैं यदि आवश्यक हो।
आरएलएफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.