it-swarm.com.de

Wie geben Sie die Spaltennamen einer Tabelle zurück?

Wie würde ich die Spaltennamen einer Tabelle mit SQL Server 2008 zurückgeben? Eine Tabelle enthält diese Spalten-ID, Name, Adresse, Land und ich möchte diese als Daten zurückgeben.

207
Belliez

Nicht sicher, ob es in 2008 eine einfachere Möglichkeit gibt.

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

Dies ist der einfachste Weg

exec sp_columns [tablename]
98
DiggDev

Etwas wie das?

sp_columns @table_name=your table name
30
Paul Lefebvre

Eine Methode ist die Abfrage von 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
12
splattne

Dies scheint ein wenig einfacher als die obigen Vorschläge, da mit der Funktion OBJECT_ID () die ID der Tabelle ermittelt wird. Jede Spalte mit dieser ID ist Teil der Tabelle.

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

Ich verwende normalerweise eine ähnliche Abfrage, um zu sehen, ob eine Spalte, von der ich weiß, dass sie zu einer neueren Version gehört, vorhanden ist. Es ist dieselbe Abfrage mit dem Zusatz von {AND name = 'YOUR_COLUMN'} zur where-Klausel.

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

versuche dies 

select * from <tablename> where 1=2

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

Ich benutze 

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%'
4
Scott K.

Das Folgende scheint die erste vorgeschlagene Abfrage zu sein, aber manchmal müssen Sie die Datenbank angeben, damit sie funktioniert. Beachten Sie, dass die Abfrage auch ohne Angabe von TABLE_SCHEMA funktionieren sollte:

SELECT COLUMN_NAME
FROM   YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
4
Edi Mohseni

Warum probieren Sie das nicht einfach aus:

klicken Sie mit der rechten Maustaste auf die Tabelle -> Skripttabelle als -> Erstellen -> Neuer Abfrage-Editor Fenster?

Die gesamte Liste der Spalten ist im Skript angegeben. Kopieren Sie es und verwenden Sie die Felder nach Bedarf.

2
angieb1008

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

2
Deepan Kanugula

Sie können den folgenden Code verwenden, um alle Spaltennamen zu drucken. Sie können den Code auch ändern, um andere Details in dem von Ihnen gewünschten Format zu drucken

    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

Ausgabe

column1
column2
column3
column4

Um den gleichen Code zum Drucken der Tabelle und ihres Spaltennamens als C # -Klasse zu verwenden, verwenden Sie den folgenden Code:

    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

Ausgabe:

 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"; } }

 } 
1
Atal Kishore
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
1
Rishikesh

Ich bin nicht sicher, ob der Wert von syscolumns.colid mit dem Wert von 'ORDINAL_POSITION' übereinstimmt, der als Teil von sp_columns zurückgegeben wird, aber im Folgenden verwende ich ihn auf diese Weise - hoffe ich bin nicht falsch informiert ...

Hier ist eine geringfügige Abweichung von einigen der anderen Antworten, die ich gefunden habe - ich verwende dies, weil die 'Position' oder Reihenfolge der Spalte in der Tabelle in meiner Anwendung wichtig ist. Ich muss im Grunde wissen, was Spalte (n) genannt wird ? '

sp_columns gibt eine ganze Menge fremder Dinge zurück, und ich bin mit Auswahlfunktionen besser als mit T-SQL-Funktionen. Daher bin ich diesen Weg gegangen:

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 
1
Jake
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE  Table_name = 'MxLocations';
SELECT @col;
0
M Thiyanithi

Ich verwende nur eine Anfrage wie Martin Smith erwähnt, nur ein wenig kürzer:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
0
Marcel Grolms

Da SysColumns veraltet ist , verwenden Sie 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 ergibt user_type_id = ID des Typs. Dies ist innerhalb der Datenbank eindeutig. Für Systemdatentypen: user_type_id = system_type_id

0
Denzil Boggs
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
0
Vishal Kiri

Die Antwort von @Gulzar Nazim ist zwar großartig, es ist jedoch wahrscheinlich einfacher, den Datenbanknamen in die Abfrage aufzunehmen, was durch die folgende SQL erreicht werden kann.

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