/ / एक साधारण स्पष्ट तालिका तालिका कथन का उपयोग करने के लिए मजबूर किए बिना, कनेक्शन के लिए स्थानीय अस्थायी तालिका कैसे बनाएं? --नेट, स्कोप, एसक्यूएल-सर्वर -2012, टेम्प-टेबल, एसक्लोकैंड

सरल स्पष्ट बनाने तालिका विवरण का उपयोग करने के लिए मजबूर किए बिना, कनेक्शन के लिए स्थानीय अस्थायी तालिका कैसे बनाएं? --नेट, स्कोप, एसक्यूएल-सर्वर -2012, टेम्प-टेबल, एसक्लोकैंड

मैं एक अस्थायी तालिका बनाना चाहता हूं जो स्थानीय हैSqlConnection के लिए, "#tempTable में चुनें" फ़ॉर्म का एक कथन का उपयोग करके, क्योंकि मुझे कॉलम नाम और प्रकार निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि मैं "तालिका #tempTable" कथन बनाउंगा;

मैं temp तालिका से दिखाना चाहता हूँबाद में SqlCommands पहले से ही खुले SqlConnection पर चल रहा है, और केवल उस कनेक्शन पर। मैं वैश्विक अस्थायी तालिकाओं का उपयोग नहीं करना चाहता, क्योंकि जब क्वेरी एक साथ चलती है तो मैं नाम विवादों से निपटना नहीं चाहता हूं।

मैंने पाया कि एक स्थानीय अस्थायी तालिका दिखाई दे रही हैबाद में SqlCommands केवल अगर यह एक सरल, अकेला "तालिका #tempTable" कथन के साथ बनाया गया है, तो कोई SQL पैरामीटर नहीं है। दूसरी तरफ, यदि यह पैरामीटर के साथ "चयन करें" कथन के साथ बनाया गया है (या दूसरे के साथ मिलकर एक एकल SqlCommand में बयान), तो उस प्रक्रिया में पूरी चीज को निष्पादित करने का कारण बनता है, जो उस प्रक्रिया में अस्थायी तालिका के दायरे को सीमित करता है।

आम तौर पर, यह अस्थायी उपयोग करना असंभव प्रतीत होता हैSqlCommands में टेबल जब SqlCommands कोई पैरामीटर के साथ सरल "तालिका बनाएं" कथन के अलावा कुछ भी नहीं है, क्योंकि SQLLommand आंतरिक रूप से कैसे काम करता है।

अस्थायी रूप से अस्थायी तालिका बनाना काम करेगा (i।ई। एक सरल "कोई SQL पैरामीटर के साथ तालिका #tempTable (col type, col type, etc)" कथन बनाएं), लेकिन इसमें स्पष्ट रूप से सभी कॉलम प्रकार (जो बहुत अधिक रखरखाव, आईएमओ है) निर्दिष्ट करते हैं, जबकि "इनमें से चुनें "कथन, मुझे कॉलम प्रकार निर्दिष्ट नहीं करना है क्योंकि वे" स्रोत कॉलम से स्वचालित रूप से मेल खाते हैं।

मैं एक अस्थायी तालिका चाहता हूं जब तक कि कनेक्शन खुला रहता है तब तक "चयन करें" के साथ बनाया गया है। क्या खुले कनेक्शन में टेबल को दायरा देने का कोई तरीका है?

जैसा कि यह अभी खड़ा है, यह वास्तव में अप्रत्याशित हैव्यवहार, क्योंकि SqlCommand का निर्माण कैसे किया जाता है, इस पर निर्भर करता है कि यह संग्रहीत प्रक्रिया में स्वयं को लपेट सकता है या नहीं, इसलिए SqlCommand के भीतर बनाई गई एक अस्थायी तालिका उसी खुले कनेक्शन पर चलने वाले बाद वाले SqlCommands को दिखाई दे सकती है या नहीं।

उत्तर:

जवाब के लिए 3 № 1

जैसा टिप्पणियों में बताया गया था, आप सी # स्ट्रिंग्स के रूप में सी # में अपना एसक्यूएल कोड कर रहे हैं। इस प्रकार आप किसी भी नाम के साथ एक temp तालिका बना सकते हैं।

मैं आपको कार्यान्वयन विवरण छोड़ दूंगा, लेकिन यह टुकड़ा आपको अपने रास्ते पर ले जाना चाहिए:

public function DoSomeSqlStuff() {
var tempTableName = CreateTempTableName();
using SqlConnection connection = new SqlConnection(connectionString) {
using SqlCommand firstCommand = new SqlCommand("CREATE TABLE #" + tempTablename + "column definitions here", connection) {
firstCommand.ExecuteNonQuery();
}

using SqlCommand secondCommand = new SqlCommand("SELECT * FROM #" + tempTableName, connection) {
secondCommand.ExecuteReader();
}

using SqlCommand thirdCommand = new SqlCommand("DROP TABLE #" + tempTableName, connection) {
thirdCommand.ExecuteNonQuery();
}
}
}

निश्चित रूप से एक सरल उदाहरण - लेकिन आपको सही रास्ते पर सेट करना चाहिए।

डेटाबेस द्वारा प्रदान की गई सुविधा के रूप में कनेक्शन-स्कोप्ड अस्थायी तालिकाओं के लिए ... मैंने कभी ऐसी चीज़ के बारे में नहीं सुना है। इसका मतलब यह नहीं है कि वे मौजूद नहीं हैं।