दिलचस्प पोस्ट
गतिशील रूप से लोड हो रहा है सीएसएस स्टाइलशीट IE पर काम नहीं करता है पायथन के साथ वेब स्क्रैपिंग इकाई फ़्रेमवर्क 4.0 में बैचिंग डीबी कमांड त्रुटि: Google मैप्स एपीआई त्रुटि: मिसिंगकेमेमैपरएर्रर JsonArray को JsonObject में जोड़ें बाद में प्राप्त हुक में गिट चेकआउट: "नहीं जीआईटी रिपॉजिटरी '।' ' प्रत्येक ऑब्जेक्ट के लिए एक जेनेरिक रिपॉजिटरी बनाम विशिष्ट रिपॉजिटरी बनाने का लाभ? बैबल 6.x में डिफ़ॉल्ट निर्यात मूल्य () की आवश्यकता नहीं हो सकती ऐप्स स्क्रिप्ट के साथ Google ड्राइव के अंदर एक ज़िप फ़ाइल बनाना कल की तारीख और आज की तारीख दिखाने के लिए जावास्क्रिप्ट कोड IN के लिए एक सरणी के साथ MySQLi बाँध परम एमएसआई स्थापना के बाद exe चलाएँ? Symfony2 में प्रपत्र फ़ील्ड के लिए डिफ़ॉल्ट मान कैसे सेट करें? थीम की उपयोगकर्ता पसंद कार्यान्वित करना एसक्यूएल – पंक्तियों से घटती मूल्य को घटाना

एसक्यूएल का चयन करके एक स्तंभ को छोड़कर तालिका ए से?

हम सभी जानते हैं कि एक तालिका से सभी कॉलम चुनने के लिए, हम उपयोग कर सकते हैं

SELECT * FROM tableA 

क्या सभी स्तंभों को निर्दिष्ट किए बिना किसी स्तंभ से स्तंभ (स्तंभों) को बाहर करने का कोई तरीका है?

 SELECT * [except columnA] FROM tableA 

मुझे पता है कि एकमात्र तरीका मैन्युअल रूप से सभी कॉलमों को निर्दिष्ट करने और अवांछित कॉलम को बाहर करना है। यह वास्तव में समय लगता है इसलिए मैं इस पर समय और प्रयासों को बचाने के तरीकों की तलाश कर रहा हूं, साथ ही साथ भविष्य के रखरखाव की मेज पर अधिक / कम स्तंभ हैं।

धन्यवाद!

Solutions Collecting From Web of "एसक्यूएल का चयन करके एक स्तंभ को छोड़कर तालिका ए से?"

मैं सभी के साथ सहमत हूं … लेकिन अगर मैं ऐसा कुछ करने जा रहा था तो मैं इसे इस तरह से कर सकता हूं:

 /* Get the data into a temp table */ SELECT * INTO #TempTable FROM YourTable /* Drop the columns that are not needed */ ALTER TABLE #TempTable DROP COLUMN ColumnToDrop /* Get results and drop temp table */ SELECT * FROM #TempTable DROP TABLE #TempTable 

नहीं।

रखरखाव-रोशनी सबसे अच्छा अभ्यास केवल आवश्यक कॉलम निर्दिष्ट करने के लिए है

कम से कम 2 कारण:

  • यह क्लाइंट और डेटाबेस स्थिर के बीच आपका अनुबंध बनाता है एक ही डेटा, हर बार
  • प्रदर्शन, अनुक्रमित कवर

संपादित करें (जुलाई 2011):

यदि आप ऑब्जेक्ट एक्सप्लोरर से एक तालिका के लिए Columns नोड खींचते हैं, तो वह आपके लिए क्वेरी विंडो में एक सीएसवी सूची को डालती है जो आपके लक्ष्यों में से एक को प्राप्त करता है

एसक्यूएल (एसक्यूएल सर्वर) में ऐसा करने का स्वचालित तरीका है:

 declare @cols varchar(max), @query varchar(max); SELECT @cols = STUFF ( ( SELECT DISTINCT '], [' + name FROM sys.columns where object_id = ( select top 1 object_id from sys.objects where name = 'MyTable' ) and name not in ('ColumnIDontWant1', 'ColumnIDontWant2') FOR XML PATH('') ), 1, 2, '' ) + ']'; SELECT @query = 'select ' + @cols + ' from MyTable'; EXEC (@query); 

यदि आप प्रत्येक कॉलम के नाम को मैन्युअल रूप से नहीं लिखना चाहते हैं तो आप Script Table As उपयोग कर सकते हैं Script Table As पर दायाँ क्लिक करके या इस तरह SSMS में देखें :

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

तब आपको नई क्वेरी संपादक विंडो में संपूर्ण चयन क्वेरी मिल जाएगी, फिर इस तरह अवांछित कॉलम निकाल दें:

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

किया हुआ

आप एक ऐसा दृश्य बना सकते हैं जिसमें कॉलम हैं जिन्हें आप चुनना चाहते हैं, तो आप केवल दृश्य से * चुन सकते हैं …

हां यह संभव है (लेकिन अनुशंसित नहीं)।

 CREATE TABLE contact (contactid int, name varchar(100), dob datetime) INSERT INTO contact SELECT 1, 'Joe', '1974-01-01' DECLARE @columns varchar(8000) SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob' ORDER BY ORDINAL_POSITION EXEC ('SELECT ' + @columns + ' FROM contact') 

कोड की व्याख्या :

  1. कॉलम नामों की अल्पविराम से अलग सूची को स्टोर करने के लिए एक वैरिएबल को घोषित करें NULL के लिए यह डिफ़ॉल्ट
  2. हमारी तालिका में कॉलम के नाम निर्धारित करने के लिए सिस्टम दृश्य का उपयोग करें
  3. का SELECT @variable = @variable + ... FROM स्तंभ नामों को जोड़ने के लिए। इस प्रकार का SELECT एक परिणाम सेट वापस नहीं करता है। यह शायद undocumented व्यवहार है लेकिन SQL सर्वर के प्रत्येक संस्करण में काम करता है। एक विकल्प के रूप में आप SET @variable = (SELECT ... FOR XML PATH('')) इस्तेमाल कर सकते हैं SET @variable = (SELECT ... FOR XML PATH(''))
  4. यदि यह पहला कॉलम नाम नहीं है, तो केवल एक अल्पविराम के लिए ISNULL फ़ंक्शन का उपयोग करें स्तंभ नामों में रिक्त स्थान और विराम चिह्न का समर्थन करने के लिए QUOTENAME फ़ंक्शन का उपयोग करें
  5. स्तंभों को छिपाने के लिए WHERE हम देखना नहीं चाहते हैं, वहां के खंड का उपयोग करें।
  6. क्रमशः पर कॉलम के नामों को हल करने के लिए EXEC (@variable) उपयोग करें, जिन्हें डायनामिक SQL के नाम से भी जाना जाता है। इसकी आवश्यकता है क्योंकि हम समय के संकलन पर कॉलम के नामों को नहीं जानते हैं।

दूसरों की तरह ही ऐसा करने के लिए कोई रास्ता नहीं है, लेकिन अगर आप एसक्यूएल सर्वर का उपयोग कर रहे हैं तो मैं जिस चीज का इस्तेमाल कर रहा हूं, वह सीएएम से आउटपुट को बदलना है, फिर करें

 select top 1 * from table 

और आउटपुट विंडो से कॉलम की पूरी सूची काट कर। तब आप चुन सकते हैं कि आप किस कॉलम में चाहते हैं, बिना उन्हें टाइप करें

असल में, आप जो चाहें वह नहीं कर सकते हैं – लेकिन चीजें थोड़ा आसान बनाने में आपकी मदद करने के लिए आप सही उपकरण प्राप्त कर सकते हैं।

यदि आप रेड-गेट के एसक्यूएल प्रॉम्प्ट को देखते हैं , तो आप "SELECT * FROM MyTable" टाइप कर सकते हैं, और फिर "*" के बाद कर्सर वापस ले जाएं, और <TAB> को फ़ील्ड की सूची के विस्तार के लिए दबाएं, और उन कुछ फ़ील्ड को हटा दें जरूरत नहीं है

यह एक सही समाधान नहीं है – लेकिन एक रफ़ू अच्छा है! 🙂 बहुत बुरा एमएस SQL ​​सर्वर प्रबंधन स्टूडियो के Intellisense अभी भी इस सुविधा की पेशकश करने के लिए पर्याप्त बुद्धिमान नहीं है …….

न घुलनेवाली तलछट

ऐसा करने का कोई रास्ता नहीं है। शायद आप कस्टम विचार बना सकते हैं यदि आपकी स्थिति में यह संभव है

संपादित करें यदि आपका डीबी डायनेमिक एसक्यूएल के निष्पादन का समर्थन करता है तो आप सपा लिख ​​सकते हैं और कॉलम को पास कर सकते हैं, जो इसे देखने के लिए नहीं चाहते हैं और इसे गतिशील रूप से क्वेरी बनाते हैं और परिणाम आपको वापस लौटाते हैं। मुझे लगता है कि यह कम से कम SQL सर्वर में संभव है

संक्षेप में आप ऐसा नहीं कर सकते हैं, लेकिन मैं उपरोक्त सभी टिप्पणियों से असहमत हूं, वहां स्थित "हैं" परिदृश्य हैं जहां आप वैध रूप से * का प्रयोग कर सकते हैं, जब आप पूरी सूची से विशिष्ट श्रेणी का चयन करने के लिए नेस्टेड क्वेरी बनाते हैं (जैसे पेजिंग) क्यों दुनिया में बाहरी कॉलम पर हर कॉलम निर्दिष्ट करना चाहते हैं, जब आपने इसे आंतरिक में किया है?

एसक्यूएल प्रबंधन स्टूडियो में आप ऑब्जेक्ट एक्सप्लोरर में कॉलम का विस्तार कर सकते हैं, फिर Columns एक आइटम को कॉलम की अलग सूची से प्राप्त करने के लिए Columns पेड़ के मद को खींचें।

यदि आप SQL सर्वर प्रबंधन स्टूडियो का प्रयोग कर रहे हैं तो निम्नानुसार करें:

  1. अपने इच्छित तालिकाओं के नाम में टाइप करें और इसे चुनें
  2. Alt + F1 दबाएं
  3. ओ / पी तालिका में स्तंभ दिखाता है
  4. वांछित कॉलम चुनें
  5. अपनी चुनिंदा क्वेरी में कॉपी और पेस्ट करें
  6. आग लगाना

का आनंद लें।

यदि हम प्रक्रियाओं की बात कर रहे हैं, तो यह एक नई क्वेरी उत्पन्न करने और इसे तत्काल निष्पादित करने के लिए इस चाल के साथ काम करता है:

 SELECT LISTAGG((column_name), ', ') WITHIN GROUP (ORDER BY column_id) INTO var_list_of_columns FROM ALL_TAB_COLUMNS WHERE table_name = 'PUT_HERE_YOUR_TABLE' AND column_name NOT IN ('dont_want_this_column','neither_this_one','etc_column'); 

क्या सभी स्तंभों को निर्दिष्ट किए बिना किसी स्तंभ से स्तंभ (स्तंभों) को बाहर करने का कोई तरीका है?

सामान्य तरीके से घोषणात्मक एसक्यूएल का उपयोग, नहीं।

मुझे लगता है कि आपका प्रस्तावित वाक्यविन्यास योग्य और अच्छा है वास्तव में, रिलेशनल डेटाबेस भाषा 'ट्यूटोरियल डी' का एक बहुत ही समान वाक्यविन्यास है, जहां ALL BUT खोजशब्दों को एक विशेषता का एक सेट (कॉलम) का पालन किया जाता है।

हालांकि, एसक्यूएल के SELECT * पहले से ही एक बहुत कुछ मिलता है (@ गुफा का जवाब यहां एक सामान्य आपत्ति है), इसलिए मुझे नहीं लगता है कि SELECT ALL BUT एसक्यूएल मानक में कभी भी जल्द ही आ जाएगा।

मुझे लगता है कि सबसे अच्छा 'आस-पास का काम' केवल उसी स्तंभों के साथ एक VIEW बनाने के लिए है, जिन्हें आप चाहते हैं, तो SELECT * FROM ThatView

मुझे यह पता नहीं है कि यह (SQL सर्वर, MySQL, Oracle, PostgreSQL) का समर्थन करने वाले किसी भी डेटाबेस के बारे में है। यह निश्चित रूप से एसक्यूएल मानकों का हिस्सा नहीं है, इसलिए मुझे लगता है कि आपको केवल कॉलम को निर्दिष्ट करना होगा।

आप निश्चित रूप से अपने एसक्यूएल कथन गतिशील रूप से बना सकते हैं और सर्वर इसे निष्पादित कर सकते हैं। लेकिन यह SQL इंजेक्शन की संभावना को खोलता है ..

खैर, यह निर्दिष्ट करने के लिए एक सामान्य सर्वोत्तम अभ्यास है कि आप किस कॉलम को चाहते हैं, केवल * निर्दिष्ट करने के बजाय तो आपको बस यह कहना चाहिए कि आप किन क्षेत्रों को वापस करना चाहते हैं

एक सहयोगी ने एक अच्छा विकल्प सुझाया:

  • अपने पूर्ववर्ती क्वेरी में चयन करें (जहां से आप डेटा प्राप्त करते हैं या प्राप्त करते हैं) एक तालिका में (जो आपने किया था जब आप हट जाएंगे)। यह आपके लिए संरचना तैयार करेगा
  • नई क्वेरी विंडो के लिए एक स्क्रिप्ट बनाएं।
  • अवांछित कॉलम निकालें शेष कॉलम को 1 लाइन में प्रारूपित करें और अपनी कॉलम सूची के रूप में पेस्ट करें।
  • आपके द्वारा बनाई गई तालिका हटाएं

किया हुआ…

इससे हमें बहुत मदद मिली

मुझे पता है कि यह थोड़ा पुराना है, लेकिन मैं एक ही मुद्दे में बस गया था और एक जवाब की तलाश में था। उसके बाद मेरे पास एक वरिष्ठ डेवलपर ने मुझे एक बहुत सरल चाल दिखाया।

यदि आप प्रबंधन स्टूडियो क्वेरी संपादक का उपयोग कर रहे हैं, तो डेटाबेस का विस्तार करें, फिर उस तालिका का विस्तार करें, जिससे आप चयन कर रहे हैं ताकि आप कॉलम फ़ोल्डर देख सकें।

आपके चयन बयान में, ऊपर संदर्भित कॉलम फ़ोल्डर को उजागर करें और उसे खींचें और क्वेरी विंडो में छोड़ दें। यह तालिका के सभी कॉलम को पेस्ट करेगा, फिर बस कॉलम की सूची से पहचान कॉलम को हटा दें …

ऑब्जेक्ट एक्सप्लोरर में राइट क्लिक करें, शीर्ष 1000 पंक्तियों का चयन करें

यह सभी कॉलमों को सूचीबद्ध करेगा और * नहीं फिर अवांछित कॉलम (ओं) को हटा दें यह अपने आप टाइप करने से ज्यादा तेज़ होना चाहिए

तब जब आपको लगता है कि यह बहुत अधिक काम है, तो रेड गेट का एसक्यूएल प्रॉम्प्ट प्राप्त करें, और एसएसएफ टाइप करें टीबीएल से, * पर जाएं और फिर टैब पर क्लिक करें।

कि मैं अक्सर इस मामले के लिए क्या उपयोग करते हैं:

 declare @colnames varchar(max)='' select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4) SET @colnames=RIGHT(@colnames,LEN(@colnames)-1) 

@colnames column1,column2,column5 जैसा दिखता है

कभी-कभी एक ही प्रोग्राम को अलग-अलग डेटाबेस स्टाक्चर को संभालना चाहिए। इसलिए मैं select बयानों में त्रुटियों से बचने के लिए कार्यक्रम में एक स्तंभ सूची का उपयोग नहीं कर सका।

* मुझे सभी वैकल्पिक फ़ील्ड्स देता है मैं जांचता हूं कि उपयोग किए जाने से पहले डेटा तालिका में मौजूद फ़ील्ड मौजूद हैं या नहीं। select में * का उपयोग करने के लिए यह मेरा कारण है

मैं बहिष्कृत क्षेत्रों को कैसे संभालता हूं:

 Dim da As New SqlDataAdapter("select * from table", cn) da.FillSchema(dt, SchemaType.Source) Dim fieldlist As String = "" For Each DC As DataColumn In DT.Columns If DC.ColumnName.ToLower <> excludefield Then fieldlist = fieldlist & DC.Columnname & "," End If Next 

इसका समाधान करने का सबसे अच्छा तरीका दृश्य का उपयोग कर रहा है, आप आवश्यक कॉलम के साथ दृश्य बना सकते हैं और डेटा को पुनः प्राप्त कर सकते हैं

 example mysql> SELECT * FROM calls; +----+------------+---------+ | id | date | user_id | +----+------------+---------+ | 1 | 2016-06-22 | 1 | | 2 | 2016-06-22 | NULL | | 3 | 2016-06-22 | NULL | | 4 | 2016-06-23 | 2 | | 5 | 2016-06-23 | 1 | | 6 | 2016-06-23 | 1 | | 7 | 2016-06-23 | NULL | +----+------------+---------+ 7 rows in set (0.06 sec) mysql> CREATE VIEW C_VIEW AS -> SELECT id,date from calls; Query OK, 0 rows affected (0.20 sec) mysql> select * from C_VIEW; +----+------------+ | id | date | +----+------------+ | 1 | 2016-06-22 | | 2 | 2016-06-22 | | 3 | 2016-06-22 | | 4 | 2016-06-23 | | 5 | 2016-06-23 | | 6 | 2016-06-23 | | 7 | 2016-06-23 | +----+------------+ 7 rows in set (0.00 sec) 
 DECLARE @SQL VARCHAR(max), @TableName sysname SELECT @SQL = COALESCE(@SQL + ', ', '') + Name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID(@TableName) AND name NOT IN ('Not This', 'Or that'); SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + @TableName EXEC (@SQL) 

नहीं, ऐसा करने का कोई तरीका नहीं है, और ऐसा करने का कोई अच्छा कारण नहीं है।

डेटा का चयन करते समय आपको * उपयोग कभी नहीं करना चाहिए, आपको उन फ़ील्ड को हमेशा निर्दिष्ट करना चाहिए जिन्हें आप चाहते हैं। इसका कारण यह है कि आप क्वेरी को उसी तरह कार्य करने के लिए चाहते हैं, भले ही आप बाद में तालिका में एक और फ़ील्ड जोड़ दें। साथ ही आप परिणामों में फ़ील्ड का क्रम निर्दिष्ट करते हैं ताकि तालिका में फ़ील्ड को दोबारा व्यवस्थित करने से परिणाम न हो।

वही निश्चित रूप से * except लिए लागू होगा, यदि यह संभव है तो * except

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

सुनिश्चित नहीं हैं कि एसक्यूएल डाटाबेस में ट्रांजोश किया जा सकता है, यदि हां, तो यह भी आसान होगा।

जेफ

ऐसा करना आसान नहीं होगा:

 sp_help <table_name> 

– 'कॉलम_नाम' कॉलम पर क्लिक करें> प्रतिलिपि बनाएं> एक ​​नई क्वेरी विंडो में चिपकाएं (एक ऊर्ध्वाधर सूची बनाता है) और बस प्रत्येक कॉलम मूल्य के सामने कॉमा टाइप करें … उन स्तंभों को बाहर करें जिन्हें आप नहीं चाहते … बहुत कम यहां दिए गए किसी भी कोड की तुलना में टाइपिंग और अभी भी प्रबंधनीय।

आप devart.com से एसक्यूएल पूर्ण प्राप्त कर सकते हैं, जो न सिर्फ रेड गेट से एसकॉमएल प्रॉम्प्ट की तरह वाइल्डकार्ड का विस्तार करता है (जैसे कि कैर्नज़ के उत्तर में वर्णित है), लेकिन चेक बॉक्स के साथ कॉलम पिकर ड्रॉप डाउन भी प्रदान करता है जिसमें आप सभी चेक कर सकते हैं वे कॉलम जिन्हें आप चयन सूची में चाहते हैं और वे आपके लिए स्वचालित रूप से डाले जाएंगे (और यदि आप एक स्तंभ को अनचेक करेंगे तो यह स्वत: चयन सूची से निकाल दिया जाएगा)।

SSMS में IntelliSense और Aliasing के साथ एक आसान तरीका है। इसे इस्तेमाल करे

  1. पाठ संपादक में राइट क्लिक करें और सुनिश्चित करें कि IntelliSense सक्षम है
  2. उपनाम [SELECT t। * FROM tablename t] से क्वेरी टाइप करें।
  3. टेक्स्ट टी। * पर जाएं और * हटाएं, और एसएसएमएस एफ एलआईएज्ड टेबल के कॉल की ऑटो-लिस्ट करेगा।

आप फिर से केवल उन कॉलमों को निर्दिष्ट कर सकते हैं जिन्हें आप चाहते हैं कि आप किसी अन्य स्क्रिप्ट के लिए एक चयन लिखने के लिए SSMS का उपयोग कर सकते हैं और फिर अधिक प्रतिलिपि / पेस्ट ऑपरेशन कर सकते हैं। यह मेरे लिए हर समय उपयोगी है।

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

 $i=0; $row_array = array(); while($row = mysqli_fetch_assoc($result)){ $row_array[$i]=$row; unset($row_array[$i]['col_name']); $i++; } 

मैंने इसे ऐसा किया और यह ठीक काम करता है (संस्करण 5.5.41):

 # prepare column list using info from a table of choice SET @dyn_colums = (SELECT REPLACE( GROUP_CONCAT(`COLUMN_NAME`), ',column_name_to_remove','') FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='database_name' AND `TABLE_NAME`='table_name'); # set sql command using prepared columns SET @sql = CONCAT("SELECT ", @dyn_colums, " FROM table_name"); # prepare and execute PREPARE statement FROM @sql; EXECUTE statement;