मैं SQL सर्वर में तालिका से स्तंभ नाम कैसे प्राप्त कर सकता हूं?


715

मैं एक तालिका के सभी स्तंभों के नाम को क्वेरी करना चाहूंगा। मैंने पाया कि यह कैसे करना है:

लेकिन मुझे यह जानने की जरूरत है: यह माइक्रोसॉफ्ट एसक्यूएल सर्वर (मेरे मामले में 2008) में कैसे किया जा सकता है ?


48
एक त्वरित और गंदी चाल के रूप में, मैं वास्तव में करना पसंद करता हूंSELECT * FROM my_table WHERE 1=0
bgusach

12
@bgusach - ऐसा लगता है कि उपयोगकर्ता तालिका में पंक्तियों के रूप में स्तंभों के नाम चाहता था, लेकिन आप जो करने की कोशिश कर रहे हैं, SELECT TOP 0 * FROM my_tableवह कम कीस्ट्रोक है
जेक वुड

@bgusach: यह मेरे लिए एक जवाब की तरह लगता है। आपको इसे पोस्ट करना चाहिए।
पलसीम

जवाबों:


863

आप सूचना स्कीमा के विचारों की क्वेरी करके यह जानकारी और बहुत कुछ प्राप्त कर सकते हैं

यह नमूना प्रश्न:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

इन सभी DB वस्तुओं पर बनाया जा सकता है:


25
"N" कस्टमर्स '' में "N" का क्या अर्थ है?
Qbik

20
Qbik "N" अगर ANSI (32bit) में varchar और यूनिकोड (64bit) में nvarchar की तरह यूनिकोड स्ट्रिंग को संभालने के लिए
Mustalok

9
पुष्टि की: MariaDB के लिए भी काम करता है! :) (बिना Nortwind....)
jave.web

5
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';यह मेरे लिए काम करता है
Pavol Travnik

1
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'जब से मैं लोकलहोस्ट पर हूं तब मुझे इसका इस्तेमाल करना था और मेरे पास एक ही नाम से अलग-अलग डेटाबेस में कई टेबल हैं।
अकिनुरी

194

आप संग्रहीत कार्यविधि sp_columns का उपयोग कर सकते हैं जो दी गई तालिका के लिए सभी स्तंभों से संबंधित जानकारी लौटाएगा। अधिक जानकारी यहाँ पाया जा सकता है http://msdn.microsoft.com/en-us/library/ms176077.aspx

आप इसे SQL क्वेरी द्वारा भी कर सकते हैं। इस तरह की कुछ चीजों में मदद करनी चाहिए:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName') 

या एक भिन्नता होगी:

SELECT   o.Name, c.Name
FROM     sys.columns c 
         JOIN sys.objects o ON o.object_id = c.object_id 
WHERE    o.type = 'U' 
ORDER BY o.Name, c.Name

यह सभी तालिका से सभी स्तंभों को प्राप्त करता है, तालिका नाम और फिर स्तंभ नाम द्वारा आदेशित किया जाता है।


147
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'

यह मिलने से बेहतर है sys.columnsक्योंकि यह DATA_TYPEसीधे दिखाता है।


5
+1 चूंकि यह मानक एएनएसआई एसक्यूएल है ( en.wikipedia.org/wiki/Information_schema ) sys.objects जैसे अन्य उत्तर मानक नहीं हैं
उलटा इंजीनियर

और यदि तालिका दूसरे स्कीमा में है (SQL सर्वर "स्कीमा" संस्करण) खंड AND TABLE_SCHEMA = 'schemaName'में जोड़ें WHERE
जोहान

बहुत उपयोगी है, और आप अपने कॉलम के नाम के साथ ही प्रकारों को प्राप्त करने के लिए अपने 'सेलेक्ट' स्टेटमेंट में जोड़ JOIN sys.types t on c.system_type_id = t.system_type_idऔर जोड़ सकते हैं । t.name
Pac0

56

आप sp_helpSQL Server 2008 में उपयोग कर सकते हैं ।

sp_help <table_name>;

उपरोक्त कमांड के लिए कीबोर्ड शॉर्टकट: तालिका नाम चुनें (यानी इसे हाइलाइट करें) और ALT+ दबाएं F1


1
यह मेरा ऑल टाइम फेवरेट कीबोर्ड शॉर्ट-कट है। मैं भी Cntl-F1 को sp_helptext असाइन करता हूं। एक साथ ये दो शॉर्टकट इतना समय बचाते हैं!
पॉल वीलैंड

44

इस क्वेरी का उपयोग करके आपको उत्तर मिलता है:

select Column_name 
from Information_schema.columns 
where Table_name like 'table name'

35

आप MySql में INFORMATION_SCHEMA का उपयोग किए बिना कॉलम नाम और सभी विवरण प्राप्त करने के लिए यह क्वेरी लिख सकते हैं:

SHOW COLUMNS FROM database_Name.table_name;

7
@Benjamin, क्योंकि यह सवाल SQL सर्वर के लिए है और यह उत्तर MySql के लिए है
Caimen

1
MySql का उपयोग करने वाले अधिकांश लोग इस समस्या का सामना कर सकते हैं। और मैंने इसका उल्लेख किया है। मैं MySql का उपयोग कर रहा हूं।
सचिन पारस

5
इससे कोई फर्क नहीं पड़ता कि अन्य RDBMSes का उपयोग करने वाले अधिकांश लोगों को एक ही समस्या है, यह मूल प्रश्न के लिए अप्रासंगिक है और प्रासंगिक उत्तरों को नीचे धकेल देता है।
डेमोनब्लैक

1
मैं नीचा दिखाता हूं क्योंकि प्रश्न विशेष रूप से mssql को संबोधित है
लुकास

27
--This is another variation used to document a large database for conversion (Edited to --remove static columns)

SELECT o.Name                   as Table_Name
     , c.Name                   as Field_Name
     , t.Name                   as Data_Type
     , t.length                 as Length_Size
     , t.prec                   as Precision_
FROM syscolumns c 
     INNER JOIN sysobjects o ON o.id = c.id
     LEFT JOIN  systypes t on t.xtype = c.xtype  
WHERE o.type = 'U' 
ORDER BY o.Name, c.Name

--In the left join, c.type is replaced by c.xtype to get varchar types

22
SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID('TABLE_NAME')

TABLE_NAME आपकी टेबल है


15
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable 
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position


11

यह SO प्रश्न निम्नलिखित दृष्टिकोण को याद कर रहा है:

-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')

10

यह जाँच करेगा कि क्या दिया tableहै आधार तालिका

SELECT 
    T.TABLE_NAME AS 'TABLE NAME',
    C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
    WHERE   T.TABLE_TYPE='BASE TABLE'
            AND T.TABLE_NAME LIKE 'Your Table Name'

10

आप यह कोशिश कर सकते हैं। यह सभी कॉलम नामों को उनके संबंधित डेटा प्रकारों के साथ देता है।

desc <TABLE NAME> ;

मुझे पता है कि यह ओरेकल में काम करता है। लेकिन क्या यह माइक्रोसॉफ़्ट एसक्यूएल में काम करता है? धन्यवाद।
DxTx

6

आप इस क्वेरी का उपयोग कर सकते हैं

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'


5

एक अन्य विकल्प जो यकीनन अधिक सहज है:

SELECT [name] 
FROM sys.columns 
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]') 

यह आपको एक कॉलम में आपके सभी कॉलम के नाम देता है। यदि आप अन्य मेटाडेटा के बारे में परवाह करते हैं, तो आप SELECT STATEMENT TO को बदल सकते हैं SELECT *


2

जवाबों का सारांश

मैं यह करने के लिए कई अलग-अलग उत्तर और तरीके देख सकता हूं लेकिन इसमें घिसाव है और यही है objective

हाँ, उद्देश्य। यदि आप only knowकॉलम नाम का उपयोग करना चाहते हैं

SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table

लेकिन अगर आप useउन स्तंभों को कहीं चाहते हैं या बस manipulateउन्हें कहते हैं तो ऊपर दिए गए त्वरित प्रश्न किसी काम के नहीं होंगे। आपको उपयोग करने की आवश्यकता है

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'

कुछ विशिष्ट स्तंभों को जानने का एक और तरीका जहां हमें कुछ समान स्तंभों की आवश्यकता है

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'


0
SELECT TOP (0) [toID]
      ,[sourceID]
      ,[name]
      ,[address]
  FROM [ReportDatabase].[Ticket].[To]

सरल और किसी भी sys तालिकाओं की आवश्यकता नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.