2011-04-13 12 views
88

मेरे पास एक स्क्रिप्ट में तालिका चर है (संग्रहित प्रक्रिया नहीं)। दो सवाल:मैं SQL-सर्वर में तालिका चर कैसे छोड़ूं? क्या मुझे यह भी करना चाहिए?

  1. मैं कैसे तालिका चर ड्रॉप करते हैं? ड्रॉप टेबल @ varName एक "गलत snytax" त्रुटि देता है।
  2. क्या मुझे हमेशा ऐसा करना चाहिए? मैंने सुना है कि यह एक अच्छा अभ्यास है। क्या इस तरह की छोटी लिपियों के लिए यह वास्तव में आवश्यक है?

यहाँ मेरी कोड है:

Declare @projectList table(
    name varchar(40) NOT NULL); 

Insert Into @projectList 
Values ('BCR-00021') 

Select * 
From @projectList 

Drop Table @projectList -- does not work 
+0

आप उन्हें अपने आप को इतना नहीं छोड़ सकते हैं आपके प्रश्न का दूसरा भाग लागू नहीं होता है। –

उत्तर

136

तालिका चर स्वचालित रूप से स्थानीय हैं और स्वचालित रूप से गिरा दिया - आप इसके बारे में चिंता करने की जरूरत नहीं है।

+14

+1 - यदि आप चाहें तो भी ** ** उन्हें छोड़ नहीं सकते हैं - जब भी सत्र खुला रहता है, तब तक वे किसी भी अन्य चर की तरह बने रहते हैं। वे लेनदेन से भी प्रभावित नहीं हैं। – JNK

+8

@JNKs उनके बारे में इंगित करते हैं कि लेन-देन से अप्रभावित होना महत्वपूर्ण है, आप डेटा चर रखने के लिए तालिका चर का उपयोग कर सकते हैं और रोलबैक का कारण बनने के बाद लॉग तालिका में लिख सकते हैं। – HLGEM

+0

कूल, यह काम करता है। क्या यह #tempTables के लिए समान है? – jtpereyda

27

तालिका चर केवल int या varchar चर के समान हैं।

आपको उन्हें छोड़ने की आवश्यकता नहीं है। वे पूर्णांक या varchar चर

एक चर का दायरा Transact SQL कथन है कि चर संदर्भित कर सकते हैं की सीमा है के रूप में ही scope नियम है। एक चर का दायरा उस बिंदु से रहता है जिसे बैच के अंत तक घोषित किया जाता है या संग्रहीत प्रक्रिया जिसमें इसे घोषित किया जाता है।

3

बस TempTables की तरह, TempDB में एक स्थानीय तालिका चर भी बनाया गया है। तालिका चर का दायरा बैच, संग्रहीत प्रक्रिया और कथन ब्लॉक है जिसमें इसे घोषित किया जाता है। उन्हें प्रक्रियाओं के बीच पैरामीटर के रूप में पारित किया जा सकता है। जब आप उस सत्र को बंद करते हैं तो उन्हें स्वचालित रूप से गिरा दिया जाता है।

+0

#temp तालिका नहीं है @table चर के समान, यह पैच या दायरे के अंत के बाद स्वचालित रूप से नहीं गिरता है, यह स्वचालित रूप से केवल तभी गिरा दिया जाता है जब इसे संग्रहीत प्रक्रिया के अंदर बनाया गया हो और संग्रहीत प्रक्रिया निष्पादित हो –

3

लेकिन आप सभी उल्लेख करना भूल गए हैं कि यदि एक लूप के भीतर एक चर तालिका का उपयोग किया जाता है तो उसे लूप के भीतर फिर से डेटा लोड करने से पहले खाली करने (@table हटाएं) की आवश्यकता होगी।

3

अगर किसी और ... इस भर आता है और तुम सच में की तरह है, जबकि एक पाश में, तुम बस सब तालिका चर से हटा सकते हैं इसे छोड़ करने की जरूरत है:

DELETE FROM @tableVariableName 
संबंधित मुद्दे