SQL SELECT * [columnA के अलावा] से एक कॉलम को बाहर करता है?


733

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

SELECT * FROM tableA

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

SELECT * [except columnA] FROM tableA

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


27
उत्पादन कोड में नहीं, बल्कि समस्या निवारण उद्देश्यों के लिए यह सुविधा होना बहुत सुविधाजनक होगा। उदाहरण: मेरे पास एक तालिका है जिसमें कई कॉलम हैं जो मैं क्वेरी करता हूं, लेकिन मैं एक टेक्स्ट कॉलम या दो को जल्दी से छोड़ना चाहता हूं।
मीका बी।

जब मुझे ओपनक्वेरी के साथ काम करना पड़ रहा था, तब मुझे इसकी ज़रूरत थी (हालाँकि मुझे SQL सर्वर के बजाय MySQL में कार्यक्षमता की आवश्यकता थी)। मुझे SQL सर्वर का उपयोग करके एक MySQL डेटाबेस को क्वेरी करना था। क्योंकि एक MySQL टेबल ने चौड़ाई चार कॉलम तय की थी, मैं एक SELECT *क्वेरी का उपयोग नहीं कर सकता था (OLE DB के पास मैपिंग के मुद्दे हैं)। मैं सही कॉलम निर्दिष्ट नहीं कर सका क्योंकि मेरे पास MySQL डेटाबेस तक कोई सीधी पहुंच नहीं थी, हालांकि SQL सर्वर मुझे निश्चित चौड़ाई चार कॉलम के नामों की जानकारी देने के लिए पर्याप्त था ...
जाहू

2
मैं ऐसा करने के लिए एक और कारण जोड़ना चाहता हूं: SELECT DISTINCT *किसी और की बनाई गई डुप्लिकेट पंक्तियों के बिना काम करने के लिए प्रमुख कॉलम को छोड़कर
undrline

1
मैं मानता हूं कि यह समय लेने वाला है। यही कारण है कि मैं आमतौर पर मेज पर सिर्फ सही क्लिक करता हूं, "शीर्ष 1000 पंक्तियों का चयन करें", फिर उन कॉलमों को हटा दें जो मुझे नहीं चाहिए।
थॉमसरोन

2
नहीं भूलना चाहिए: कई मामलों में डेवलपर को कॉलम नहीं पता है क्योंकि वे बदल सकते हैं। यह डेटा वेयरहाउस में विशिष्ट है। 6 महीने के बाद, वे एक अतिरिक्त कॉलम जोड़ते हैं और इसे कोड को बदले बिना चुना जाना चाहिए।

जवाबों:


446

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

/* 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

222
अक्षम ... लेकिन बहुत रचनात्मक :)
गुइलेर्मो गुतिरेज़

1
सुंदर। मुझे अक्सर दो टेम्‍प टेबल और एक टेम्‍प में शामिल होने के लिए दूसरी टेबल में शामिल करने की आवश्‍यकता होती है, जहां मुझे टेम्‍प में सभी कॉलम की जरूरत न हो - विशेष रूप से क्‍योंकि इसमें ग्रुपिंग शामिल होगी।
21-05 को

2
बहुत अच्छा। यकीन है कि स्तंभ के नामों को अमूर्त करने की समस्या को हल करता है।
टोस्टर

1
@CeesTimmerman - यदि आपके पास डुप्लीकेट कॉलम नामों से युक्त एक क्वेरी है, तो यह एक अलग समस्या है, जिसका परिणाम आप ले रहे हैं। Google "SQL कॉलम का नाम बदलें" या "SQL कॉलम उपनाम"। कुछ इस तरह SELECT table1.ID AS table1ID ..., IIRC।
टूलमेकरस्टेव

3
@ToolmakerSteve इस प्रश्न का विचार केवल उन कॉलमों को निर्दिष्ट करना है जिनकी आपको आवश्यकता नहीं है। नामकरण कॉलम को किसी विशेष तालिका के 20+ कॉलम, सभी को निर्दिष्ट करने की आवश्यकता होगी।
सेस टिम्मरमैन

289

नहीं।

रखरखाव-प्रकाश सर्वोत्तम अभ्यास केवल आवश्यक कॉलम निर्दिष्ट करना है।

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

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

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

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


3
मुझे कभी नहीं पता था कि कॉलग्मन को खींचने के बारे में बात करने के लिए धन्यवाद GBN आपने फिर से दिन बचा लिया है। आपको अपनी sql विशेषज्ञता के कारण बहुत सारे $ $ बनाने होंगे
l --''''''--------- '' '' '' '' '' ''

4
विशेष रूप से ETL दिनचर्या में SELECT * के साथ वैध परिदृश्य हैं। मुझे लगता है कि यहां सबसे अच्छा जवाब डायनेमिक SQL वाला है।
mishkin

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

3
"केवल आवश्यक कॉलम निर्दिष्ट करें" - हार्ड कोडिंग बकवास
आरएम हेली

9
हालाँकि इस तरह के जवाबों को बहुत अधिक वोट मिलते हैं, लेकिन जहां तक ​​मेरा सवाल है, उनका कोई मूल्य नहीं है। वैचारिक रूप से, "एबीसी को छोड़कर * का चयन करें" में सक्षम होना कोई अधिक समस्या नहीं है कि "सिलेक्ट *" जो भाषा समर्थन करती है। ओपी स्पष्ट रूप से कुछ हासिल करने का तरीका पूछ रहा है। इस प्रश्न का उत्तर देने वाले व्यक्ति के पास यह जानने का कोई तरीका नहीं है कि क्या ओपी उत्पादन कोड में इसका उपयोग करना चाहता है या अगर उन्हें डेटाबेस के लिए कुछ कोड विकसित करते समय इस तरह से क्वेरी चलाने की तत्काल आवश्यकता है, तो अच्छे मानकों के बारे में व्याख्यान कोई मूल्य नहीं देता है।
इसकाme2003

68

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

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

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

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

किया हुआ


2
यह सभी स्तंभ नामों का चयन करने से अधिक आसान है, फिर इसमें अल्पविराम जोड़ें।
शैजुत

68

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

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);

क्या होगा यदि आप CTE या अन्य सबक्वेरी के परिणाम से क्वेरी कर रहे हैं? एक सरल उदाहरण: आप एक उपश्रेणी बनाना चाहते हैं जो row_number()प्रत्येक पंक्ति के परिणाम को जोड़ती है , फिर एक शामिल होने का प्रदर्शन करती है, फिर सम्मिलित होने के परिणाम को छोड़करrow_number सब कुछ का चयन करें । row_number
एली

43

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


8
सबसे पहले मेरी प्रतिक्रिया थी "यह केवल कॉलम निर्दिष्ट करने की तुलना में आसान कैसे है"? लेकिन फिर मैंने फैसला किया कि रखरखाव के दृष्टिकोण से, यह एक सुधार हो सकता है।
टूलमेकरस्टेव

1
यह भी एक अस्थायी तालिका या गतिशील SQL के साथ मुकाबला करने के बजाय क्वेरी ऑप्टिमाइज़र का समर्थन करता है।
अंडरस्कोर_ड

30

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

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परिणाम सेट वापस नहीं होता है। यह शायद अनिर्दिष्ट व्यवहार है लेकिन SQL सर्वर के हर संस्करण में काम करता है। एक विकल्प के रूप में आप SET @variable = (SELECT ... FOR XML PATH(''))तार का उपयोग कर सकते हैं ।
  4. ISNULLयदि यह पहला स्तंभ नाम नहीं है, तो अल्पविराम को प्रस्तुत करने के लिए फ़ंक्शन का उपयोग करें । QUOTENAMEस्तंभ नामों में रिक्त स्थान और विराम चिह्न का समर्थन करने के लिए फ़ंक्शन का उपयोग करें ।
  5. WHEREहम जिन स्तंभों को देखना नहीं चाहते, उन्हें छिपाने के लिए क्लॉज़ का उपयोग करें ।
  6. उपयोग EXEC (@variable), जिसे गतिशील एसक्यूएल के रूप में भी जाना जाता है , रनटाइम पर कॉलम नामों को हल करने के लिए। इसकी आवश्यकता है क्योंकि हम संकलन समय पर कॉलम के नाम नहीं जानते हैं।

धन्यवाद! यह मेरी समस्या को हल करने की कुंजी थी ।
एंटोनियो

मेरा एक प्रश्न है: किस कारण से दूसरे चयन को EXEC स्टेटमेंट में डालना है? मैंने देखा है कि यह प्रभावी रूप से आवश्यक है, लेकिन मुझे आश्चर्य है कि मैं बस क्यों नहीं लिख सकताSELECT @columns FROM contact
एंटोनियो

17

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

select top 1 * from table

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


13
SSMS से खींचने के बारे में मेरी टिप देखें
gbn

11

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

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

यह एक सही समाधान नहीं है - लेकिन एक अच्छा अच्छा! :-) बहुत बुरा एमएस एसक्यूएल सर्वर प्रबंधन स्टूडियो का इंटेलीजेंस अभी भी इस सुविधा की पेशकश करने के लिए पर्याप्त बुद्धिमान नहीं है ......।

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


यह अच्छा है, लेकिन समस्या यह है कि आपकी क्वेरी बहुत बड़ी हो सकती है। यह अच्छा होगा कि "सिवाय" सुविधा के, ठेस कोड के लिए नहीं, बल्कि तदर्थ क्वेरी के लिए।
मीका बी।

8

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

EDIT हो सकता है अगर आपका DB गतिशील sql u के निष्पादन का समर्थन करता है तो SP लिख सकता है और कॉलम u को पास नहीं करना चाहता जो इसे देखना चाहता है और इसे क्वेरी को गतिशील रूप से बनाने और आपको परिणाम वापस करने दें। मुझे लगता है कि यह SQL सर्वर पर कम से कम उल्लेखनीय है


13
यह उल्लेखनीय है, लेकिन मैं ऐसा करने वाले व्यक्ति को आग लगा दूंगा।
लेवेन केर्सेमेकर्स

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

8

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

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

का आनंद लें।


7

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


6

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


क्या आप इनर कॉलम का प्रतिनिधित्व करने के लिए "innername। *" की कुछ भिन्नता का उपयोग कर सकते हैं, "चयन तालिका 1। * ..." के समान है?
टूलमेकरस्टेव

6
DECLARE @SQL VARCHAR(max), @TableName sysname = 'YourTableName'

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)

अपडेट करें:

यदि आप इसे अधिक बार उपयोग करते हैं तो आप इस कार्य की देखभाल के लिए एक संग्रहीत कार्यविधि भी बना सकते हैं। इस उदाहरण में मैंने अंतर्निहित STRING_SPLIT () का उपयोग किया है जो SQL Server 2016+ पर उपलब्ध है, लेकिन यदि आपको आवश्यकता है तो SO पर मैन्युअल रूप से इसे बनाने के तरीके के उदाहरणों की बहुलता है।

CREATE PROCEDURE [usp_select_without]
@schema_name sysname = N'dbo',
@table_name sysname,
@list_of_columns_excluded nvarchar(max),
@separator nchar(1) = N','
AS
BEGIN
 DECLARE 
 @SQL nvarchar(max),
 @full_table_name nvarchar(max) = CONCAT(@schema_name, N'.', @table_name);

 SELECT @SQL = COALESCE(@SQL + ', ', '') + QUOTENAME([Name])
 FROM sys.columns sc
 LEFT JOIN STRING_SPLIT(@list_of_columns_excluded, @separator) ss ON sc.[name] = ss.[value]
 WHERE sc.OBJECT_ID = OBJECT_ID(@full_table_name, N'u')
 AND ss.[value] IS NULL;

 SELECT @SQL = N'SELECT ' + @SQL + N' FROM ' + @full_table_name;
 EXEC(@SQL)
END

और फिर बस:

EXEC [usp_select_without] 
@table_name = N'Test_Table',
@list_of_columns_excluded = N'ID, Date, Name';

5

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

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');

5

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

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

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

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

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


1
@underscore_d: मैंने अब अपने उत्तर को संशोधित कर दिया है।
onedaywhen

कूल, मैं आपके अंतिम 2 पैराग्राफ से सहमत हूं। ट्यूटोरियल डी के बारे में जानकारी दिलचस्प है, हालांकि मैं उन लोगों से सहमत हूं जो सोचने select *योग्य हैं - तदर्थ सामान और कार्यक्रमों के लिए बहुत उपयोगी है जिन्हें डेटा टेबल को उदारतापूर्वक संभालने की आवश्यकता है, लेकिन निर्माण के लिए इतना बेहतर नहीं है (बेहतर शब्द की कमी) 'शुद्ध' प्रश्न। फिर भी, एएनएसआई मानक में नहीं होने का मतलब यह नहीं है कि माइक्रोसॉफ्ट इसे अपनी बोली में नहीं जोड़ सकता है, जैसा कि कई अन्य चीजों के साथ है, लेकिन मुझे संदेह है कि क्या वे करेंगे।
अंडरस्कोर_ड

5

BigQuery जैसी आधुनिक SQL बोली एक उत्कृष्ट समाधान का प्रस्ताव करती है

* EXCEPT (ColumnNameX, [ColumnNameY, ...]) का चयन करें

यह स्तंभों की एक लंबी सूची से बचने के लिए एक बहुत शक्तिशाली एसक्यूएल सिंटैक्स है जिसे टेबल कॉलम नाम परिवर्तन के कारण हर समय अपडेट करने की आवश्यकता होती है। और यह कार्यक्षमता वर्तमान SQL सर्वर कार्यान्वयन में गायब है, जो एक दया है। उम्मीद है, एक दिन, Microsoft Azure अधिक डेटा वैज्ञानिक अनुकूल होगा।

डेटा वैज्ञानिक एक क्वेरी को छोटा करने और कुछ कॉलम (डुप्लिकेट या किसी अन्य कारण के कारण) को निकालने में सक्षम होने का एक त्वरित विकल्प होना पसंद करते हैं।

https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers


4

Postgres sql को करने का एक तरीका है

pls देखें: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html

सूचना स्कीमा हैक तरीका

SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
        FROM information_schema.columns As c
            WHERE table_name = 'officepark' 
            AND  c.column_name NOT IN('officeparkid', 'contractor')
    ), ',') || ' FROM officepark As o' As sqlstmt

मेरी विशेष उदाहरण तालिका के लिए उपरोक्त - एक sql कथन उत्पन्न करता है जो इस तरह दिखता है

O.officepark, o.owner, o.squarefootage FROM officepark as o का चयन करें


जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
भार्गव राव

3

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

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


3

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

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

अपने चयन विवरण में, बस ऊपर संदर्भित स्तंभ फ़ोल्डर को हाइलाइट करें और इसे क्वेरी विंडो में खींचें और छोड़ें। यह तालिका के सभी स्तंभों को चिपकाएगा, फिर बस पहचान कॉलम को स्तंभों की सूची से हटा दें ...


1
हां, लेकिन क्या होगा अगर आपके पास 5 जुड़ते हैं, तो विचार करना होगाSELECT * Except(tableName.ColumnName) FROM ...
पावेल किओच

मुझे यह उपयोगी लगता है :) मुझे इसके बारे में पता नहीं है, फिर भी यह विषय के सवाल का जवाब नहीं है।
Fka

3

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

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)

3
क्या होगा यदि स्तंभों की संख्या बड़ी है, 100 का कहना है और हम सभी स्तंभों का चयन करना चाहते हैं, लेकिन एक। क्या एक बेहतर दृष्टिकोण है?
कार्तिककानपुर

5
यह एक तरह की बात याद आती है। आप दूसरी कॉल में "आईडी, तारीख" का चयन कर रहे हैं, जो कि, यदि आप ऐसा करने जा रहे हैं, तो बस पहले स्थान पर करें।
कीथजॉली

3

यदि आप उदाहरण के लिए पासवर्ड जैसे संवेदनशील केस कॉलम को बाहर करना चाहते हैं, तो मैं मान छिपाने के लिए ऐसा करता हूं:

SELECT * , "" as password FROM tableName;


इसने मेरे लिए काम किया
अरुण प्रसाद ES

1
जबकि आपको निश्चित रूप से अपने डेटाबेस में स्पष्ट-पाठ पासवर्ड संग्रहीत नहीं करना चाहिए। कम से कम वे के साथ नमक और हो सकता है काली मिर्च टुकड़ों में बांटा जाना चाहिए security.stackexchange.com/questions/3272/...
Anders_K

2

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


2

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

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

किया हुआ...

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


1

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

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

फिर जब आपको लगे कि यह थोड़ा बहुत काम है, तो Red Gate का SQL Prompt प्राप्त करें, और tbl से ssf टाइप करें, * पर जाएँ और टैब पर फिर से क्लिक करें।


1

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

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


1

कभी-कभी एक ही प्रोग्राम को अलग-अलग डेटाबेस स्टैचर को संभालना चाहिए। इसलिए मैं 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

अपने प्रश्न / समस्या को विस्तृत / स्पष्ट करने पर विचार करें।
बैडफिल्म्स

1

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

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ', ', ' ' ) + name from sys.columns where name not in ('colName1','colName2') and object_id = (Select id from sysobjects where name = 'tblName')
SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + 'tblName'
EXEC sp_executesql  @SQL

0

क्या ऐसा करना सरल नहीं होगा:

sp_help <table_name>

Umn Column_name ’कॉलम पर क्लिक करें> कॉपी करें> पेस्ट करें (एक ऊर्ध्वाधर सूची बनाता है) एक नई क्वेरी विंडो में और प्रत्येक स्तंभ मान के सामने सिर्फ अल्पविराम टाइप करें ... उन स्तंभों पर टिप्पणी करें जो आप नहीं चाहते ... बहुत कम यहां दिए गए किसी भी कोड से टाइप करना और फिर भी प्रबंधनीय होना।


"यहां दिए गए किसी भी कोड की तुलना में बहुत कम टाइपिंग" और क्वेरी संपादक में कॉलम नोड को या सूची प्राप्त करने के किसी भी अन्य बेहतर तरीके को खींचने की तुलना में कहीं अधिक परेशानी है। मेरा मतलब है कि कई 10 कॉलम वाले टेबल के बारे में क्या है?
अंडरस्कोर_ड

0

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


0

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

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


क्या आप कॉलम अपवर्जन के लिए अपना जवाब निर्दिष्ट कर सकते हैं, कृपया?
Kamiccolo

@Kamiccolo - डकवर्क द्वारा जो वर्णन किया जा रहा है वह एक MANUAL कार्रवाई है। वांछित कॉलम नामों को काटना और चिपकाना। वह केवल यह कह रहा है कि यह अधिक टाइपिंग के बिना, आसानी से नामों पर प्राप्त करने का एक तरीका है। यह आपको एक क्वेरी लिखने में मदद नहीं करता है जो कहती है कि "इस कॉलम को बाहर करें"। यह आपको कॉलम की वांछित सूची बनाने में मदद करता है, जिसे आप तब अपनी क्वेरी में पेस्ट करते हैं।
टूलमेकरवेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.