2009-03-01 27 views
184

SQL सर्वर 2008 का उपयोग कर तालिका के कॉलम नाम कैसे वापस करूँगा? यानी एक तालिका में इन कॉलम- आईडी, नाम, पता, देश शामिल हैं और मैं इसे डेटा के रूप में वापस करना चाहता हूं।आप तालिका के कॉलम नाम कैसे वापस कर सकते हैं?

उत्तर

310

अगर वहाँ 2008 संस्करण में एक आसान तरीका है सुनिश्चित नहीं हैं।

USE [Database Name] 
SELECT COLUMN_NAME,* 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName' 
+5

'YourSchemaName' क्या है? – Drewdin

+11

'YourSchemaName' उस तालिका के लिए स्कीमा है जिसके विरुद्ध आप पूछताछ कर रहे हैं। उदाहरण: dbo.myTable, 'dbo' स्कीमा है जो 'myTable' से संबंधित है। स्कीमा व्यक्तिगत रूप से प्रत्येक तालिका के बजाय समूहकरण को अनुमतियां असाइन करना आसान बनाता है। यह प्रश्न भी देखें: http://stackoverflow.com/questions/1062075/why-do-table-names-in-sql-server-start-with-dbo – jmosesman

+2

यूएसबी डेटाबेस नाम कमांड पर न भूलें अन्यथा आप मास्टर या अलग-अलग डेटाबेस – Muflix

28

ऐसा कुछ?

sp_columns @table_name=your table name 
11

एक विधि syscolumns क्वेरी करने के लिए है:

select 
    syscolumns.name as [Column], 
    syscolumns.xusertype as [Type], 
    sysobjects.xtype as [Objtype] 
from 
    sysobjects 
inner join 
    syscolumns on sysobjects.id = syscolumns.id 
where sysobjects.xtype = 'u' 
and sysobjects.name = 'MyTableName' 
order by syscolumns.name 
+1

मुझे यह वास्तव में पसंद है। मुझे 'Objtype' कॉलम अनावश्यक लगता है, हालांकि :) – Joel

+1

क्या शामिल होना पूरी तरह से लिखना बेहतर नहीं होगा (sysobjects इतनी आंतरिक syscolumns sc में so.id = sc.id पर शामिल हों)? यह प्रदर्शन की कीमत पर एक आलसी जवाब की तरह लगता है। मैं गलत हो सकता था ... – Losbear

+1

@ लॉसबियर ने इसे बदल दिया PS: आलसी नहीं, यह सिर्फ 8 साल पहले ही कोड है। :) पुराने समय में (मैंने संस्करण 4.2 पर शुरू होने वाले SQL सर्वर का उपयोग किया), मैं इस तरह से SQL क्वेरी लिखता था। कोई प्रदर्शन समस्या नहीं है। – splattne

1

मुझे यकीन है कि अगर syscolumns.colid मूल्य लेकिन में, sp_columns के हिस्से के रूप में लौट आए 'ORDINAL_POSITION' मान के समान है नहीं कर रहा हूँ क्या इस प्रकार मैं इसका उपयोग कर रहा हूं - उम्मीद है कि मैं गलत जानकारी नहीं दे रहा हूं ...

यहां मिले कुछ अन्य उत्तरों पर थोड़ी भिन्नता है - मैं इसका उपयोग इसलिए करता हूं क्योंकि कॉलम की 'स्थिति' या ऑर्डर तालिका मेरे आवेदन में महत्वपूर्ण है - मुझे मूल रूप से जानने की जरूरत है 'कॉलम क्या है (एन) बुलाया?'

select  
    syscolumns.name, 
    syscolumns.colid  
from  
    sysobjects, syscolumns 
where 
    sysobjects.id = syscolumns.id and 
    sysobjects.xtype = 'u' and 
    sysobjects.name = '<YOUR_TABLE>' 
order by syscolumns.colid 
+0

मैंने इस विधि का प्रयोग लंबे समय तक किया था, लेकिन इसके खिलाफ सलाह दी गई थी। असल में मैंने सही समस्या को मारा जो मुझे बताया गया था ... यह अधिक संभावना है कि एमएसएसक्यूएल के नए संस्करण सिंटैक्स को बदल देंगे। उदाहरण के लिए यह उन संस्करणों में sys.object और sys.columns होता था जिन्हें मैंने पहली बार इस तकनीक का उपयोग किया था। माना जाता है कि स्कीमा और संग्रहीत प्रक्रिया विधियां इसके खिलाफ अधिक प्रमाण हैं ... सुनिश्चित नहीं है, लेकिन अब तक बहुत अच्छा है। – RosieC

1
CREATE PROCEDURE [dbo].[Usp_GetColumnName]  
     @TableName varchar(50) 
AS 
BEGIN 
    BEGIN 
     SET NOCOUNT ON 
     IF (@TableName IS NOT NULL) 
      select ORDINAL_POSITION OrderPosition,COLUMN_NAME ColumnName from information_schema.columns 
      where table_name [email protected] 
      order by ORDINAL_POSITION 
    END 
END 
+2

एसओ में आपका स्वागत है!लेकिन ऐसा लगता है कि इस प्रश्न को पहले से ही तीन साल पहले एक संतोषजनक उत्तर मिला है ... साथ ही, कोड पोस्ट करते समय, इसे हाइलाइट करने के लिए {} का उपयोग करें। एफएक्यू पर एक नज़र डालें, इसकी शुरुआत यहां कुछ अच्छी जानकारी है: http://stackoverflow.com/faq –

84

यह सबसे आसान तरीका है

है:

sp_columns बाहरी सामान की एक पूरी गुच्छा देता है, और मैं T-SQL कार्यों की तुलना में एक चयन के साथ handier हूँ, इसलिए मैं इस मार्ग चला गया

exec sp_columns [tablename] 
+0

यह छोटा और सरल है, सही जवाब होना चाहिए। मुझे कल्पना है कि जब प्रश्न मूल रूप से पूछा गया था तब यह अस्तित्व में नहीं था :) – DanteTheSmith

2

क्यों नहीं सिर्फ इस प्रयास करें:

सही टैब पर क्लिक करें le -> स्क्रिप्ट तालिका के रूप में -> बनाने के लिए -> नई क्वेरी संपादक विंडो?

कॉलम की पूरी सूची स्क्रिप्ट में दी गई है। इसे कॉपी करें और आवश्यकतानुसार फ़ील्ड का उपयोग करें।

+3

लेखक शायद यह जानना चाहता था कि संग्रहित प्रक्रिया या अन्य स्क्रिप्ट में प्रोग्राम के लिए प्रोग्राम से कॉलम नाम कैसे प्राप्त करें। – KLee1

+1

उत्तर में कहा गया है, "मैं इसे डेटा के रूप में वापस करना चाहता हूं", जबकि आपके उत्तर को मूल्य मिलेगा, ऐसा लगता है कि ओपी रनटाइम पर डेटा चाहता है। – StuperUser

4

मैं उपयोग

SELECT st.NAME, sc.NAME, sc.system_type_id 
FROM sys.tables st 
INNER JOIN sys.columns sc ON st.object_id = sc.object_id 
WHERE st.name LIKE '%Tablename%' 
8

इसका कारण यह है कि यह object_id() फ़ंक्शन का उपयोग करता तालिका के आईडी का पता लगाने का थोड़ा आसान तो उपरोक्त सुझावों लगता है। उस आईडी के साथ कोई भी स्तंभ तालिका का हिस्सा है।

SELECT * 
    FROM syscolumns 
WHERE id=OBJECT_ID('YOUR_TABLE') 

मैं आमतौर पर एक समान क्वेरी का उपयोग करता हूं यह देखने के लिए कि मुझे पता है कि एक कॉलम एक नए संस्करण का हिस्सा है या नहीं। यह कहां है जहां {AND name = 'YOUR_COLUMN'} को जोड़ने के साथ ही वही प्रश्न है।

IF EXISTS (
     SELECT * 
      FROM syscolumns 
     WHERE id=OBJECT_ID('YOUR_TABLE') 
      AND name='YOUR_COLUMN' 
     ) 
BEGIN 
    PRINT 'Column found' 
END 
0

तरह मार्टिन स्मिथ, उल्लेख बस थोड़ा मैं सिर्फ एक क्वेरी का उपयोग कम:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName' 
4

निम्नलिखित ऊपर पहले प्रस्तावित क्वेरी की तरह प्रतीत हो रहा है, लेकिन कुछ समय आप डेटाबेस निर्दिष्ट करना इसे काम करने के लिए।ध्यान दें कि क्वेरी भी TABLE_SCHEMA निर्दिष्ट किए बिना काम करना चाहिए:

SELECT COLUMN_NAME 
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME' 
0

@Gulzar Nazim के जवाब बढ़िया है, फिर यह शायद आसान डेटाबेस नाम क्वेरी में है, जो निम्नलिखित एसक्यूएल द्वारा प्राप्त किया जा सकता है शामिल करने के लिए है ।

SELECT COLUMN_NAME, * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name' 
2

USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'

0
SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'TableName' 
0

SysColumns is deprecated के बाद से, Sys.All_Columns का उपयोग करें:

Select 
ObjectName  = Object_Name(Object_ID) 
,T.Name 
,C.* 
,T.* 
From 
      Sys.All_Columns C 
Inner Join Sys.Types  T On T.User_Type_Id = C.User_Type_Id 
Where [Object_ID] = Object_ID('Sys.Server_Permissions') 
--Order By Name Asc 

Select * From Sys.Types प्रकार के user_type_id = ID निकलेगा। यह डेटाबेस के भीतर अद्वितीय है। सिस्टम डेटा प्रकारों के लिए: user_type_id = system_type_id

1

आप सभी कॉलम नाम मुद्रित करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं; तुम भी अन्य विवरण जो भी प्रारूप में यू की तरह

declare @Result varchar(max)=' 
      ' 
      select @[email protected]+''+ColumnName+' 
      ' 
      from 
      (
       select 
        replace(col.name, ' ', '_') ColumnName, 
        column_id ColumnId 
       from sys.columns col 
        join sys.types typ on 
         col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id 
       where object_id = object_id('tblPracticeTestSections') 
      ) t 
      order by ColumnId 
      print @Result 

आउटपुट

column1 
column2 
column3 
column4 

मुद्रित करने के लिए एक ही कोड का उपयोग करने के मेज और सी # वर्ग के रूप में अपनी स्तंभ नाम का उपयोग मुद्रित करने के लिए कोड को संशोधित कर सकते हैं नीचे दिए गए कोड:

declare @TableName sysname = '<EnterTableName>' 
    declare @Result varchar(max) = 'public class ' + @TableName + ' 
    {' 

    select @Result = @Result + ' 
     public static string ' + ColumnName + ' { get { return "'+ColumnName+'"; } } 
    ' 
    from 
    (
     select 
      replace(col.name, ' ', '_') ColumnName, 
      column_id ColumnId 
     from sys.columns col 
      join sys.types typ on 
       col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id 
     where object_id = object_id(@TableName) 
    ) t 
    order by ColumnId 

    set @Result = @Result + ' 
    }' 

    print @Result 

आउटपुट:

public class tblPracticeTestSections 
{ 
    public static string column1 { get { return "column1"; } } 

    public static string column2{ get { return "column2"; } } 

    public static string column3{ get { return "column3"; } } 

    public static string column4{ get { return "column4"; } } 

} 
3

कोशिश इस

select * from <tablename> where 1=2 

................................... ............

0
DECLARE @col NVARCHAR(MAX); 
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations'; 
SELECT @col; 
संबंधित मुद्दे