2012-03-13 10 views
29

में टेबल वैरिएबल बनाना तालिका चर क्या है? और मौजूदा स्टोर्ड प्रक्रिया परिणामसेट से मेल खाने वाले स्तंभों के साथ तालिका चर (वर्चुअल इन-मेमोरी टेबल) कैसे बनाएं।एसक्यूएल सर्वर 2008 आर 2

मैंने प्रक्रिया को निष्पादित किया और इसे निष्पादित करने के बाद, कॉलम नाम मुझे ज्ञात हैं। लेकिन क्या मुझे कॉलम के समान डेटा प्रकार घोषित करना है क्योंकि यह संग्रहीत प्रक्रिया में था?

संपादित करें: मैं करने की कोशिश की इस

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL 
); 

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param 
+6

बस चेतावनी का एक शब्द: एक तालिका परिवर्तक स्मृति में होने की गारंटी नहीं है। यह एक मिथक है। – JohnFx

+0

क्या आप अभी तक अपना कोड शामिल कर सकते हैं ताकि हम आपके प्रश्न का उत्तर दे सकें? – JohnFx

+0

@JohnFx मैंने तालिका चर के निर्माण के लिए कोड निष्पादित नहीं किया है। मैंने एक संग्रहीत प्रक्रिया बनाई और इसे निष्पादित करने के बाद मुझे कुछ कॉलम नाम मिल गए, अब मैं उन कॉलम नामों को तालिका चर में संग्रहीत करना चाहता हूं। और यदि यह हमेशा स्मृति में नहीं है तो मैं इसे अपने डेटाबेस में कैसे ढूंढ सकता हूं, परेशान करने के लिए खेद है कि मैं SQL पर नया हूं। कृपया मदद करे। – Pankaj

उत्तर

29

@tableName तालिका चर चालू स्क्रिप्ट की अवधि के लिए जीवित हैं केवल यानी वे केवल सत्र के स्तर वस्तुओं रहे हैं।

इसका परीक्षण करने के लिए, SQL सर्वर प्रबंधन स्टूडियो के तहत दो क्वेरी संपादक विंडो खोलें, और समान नाम के साथ तालिका चर बनायें लेकिन विभिन्न संरचनाएं बनाएं। आपको एक विचार मिलेगा। @tableName ऑब्जेक्ट इस प्रकार अस्थायी है और डेटा की हमारी आंतरिक प्रसंस्करण के लिए उपयोग किया जाता है, और यह वास्तविक डेटाबेस संरचना में योगदान नहीं देता है।

एक अन्य प्रकार का टेबल ऑब्जेक्ट है जिसे अस्थायी उपयोग के लिए बनाया जा सकता है।

Create table #test (Id int, Name varchar(50)) 

इस तालिका में वस्तु बनाया है और अस्थायी डेटाबेस में संग्रहीत किया जाता है: वे #tableName वस्तुओं शारीरिक तालिकाओं के लिए इसी तरह के बयान बनाने की तरह घोषित कर रहे हैं। पहले के विपरीत, यह ऑब्जेक्ट अधिक उपयोगी है, बड़े डेटा को स्टोर कर सकता है और लेनदेन में भाग ले सकता है। कनेक्शन तब तक जीवित हैं जब तक कनेक्शन खुला नहीं होता है। आपको इसे फिर से बनाने से पहले बनाई गई ऑब्जेक्ट को स्क्रिप्ट का पालन करके छोड़ना होगा।

IF OBJECT_ID('tempdb..#test') IS NOT NULL 
    DROP TABLE #test 

आशा है कि यह समझ में आता है!

+1

में नहीं है अंततः इस भाग के साथ किया गया है। :) – Pankaj