2009-03-01 5 views

Antwort

310

Nicht sicher, ob es einen einfacheren Weg in der Version 2008 gibt.

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

Was ist der 'YourSchemaName'? – Drewdin

+11

'YourSchemaName' ist das Schema für die Tabelle, die Sie abfragen. Beispiel: dbo.myTable, 'dbo' ist das Schema, zu dem 'myTable' gehört. Schemas erleichtern das Zuweisen von Berechtigungen zu einer Gruppierung anstelle jeder einzelnen Tabelle. Siehe auch diese Frage: http://stackoverflow.com/questions/1062075/why-do-table-names-in-sql-server-start-with-dbo – jmosesman

+2

Vergessen Sie nicht auf USE DatabaseName Befehl sonst können Sie in Master oder suchen andere Datenbank als Sie möchten – Muflix

28

So ähnlich?

sp_columns @table_name=your table name 
11

Eine Methode ist syscolumns abfragen:

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

Ich mag diese wirklich. Ich finde 'Objtype' Spalte jedoch redundant :) – Joel

+1

Wäre es nicht besser, den Join vollständig auszuschreiben (sysobjects so inner joins syscolumns sc auf so.id = sc.id)? Dies scheint eine faule Antwort auf Kosten der Leistung zu sein. Ich könnte mich irren ... – Losbear

+1

@Losbear hat es geändert PS: Nicht faul, es ist nur Code von vor 8 Jahren. :) In alten Zeiten (ich habe SQL Server ab Version 4.2 benutzt) habe ich SQL-Abfragen auf diese Weise geschrieben. keine Leistungsprobleme. – splattne

1

Ich bin mir nicht sicher, ob der syscolumns.colid Wert ist das gleiche wie der ‚ORDINAL_POSITION‘ Wert als Teil sp_columns zurückgegeben, sondern in dem, was folgt ich benutze es auf diese Weise - hoffe, dass ich nicht fisminforming bin ...

Hier ist eine leichte Variation auf einige der anderen Antworten, die ich gefunden habe - ich benutze dies, weil die 'Position' oder Reihenfolge der Spalte in Die Tabelle ist wichtig in meiner Anwendung - ich muss im Grunde wissen 'Was ist Spalte (n) namens?'

sp_columns eine ganze Reihe von fremden Sachen zurück, und ich bin handlicher mit einem ausgewählten als T-SQL-Funktionen, so ging ich diesen Weg:

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

Ich habe diese Methode lange benutzt, wurde aber davon abgeraten. In der Tat traf ich das genaue Problem, das mir gesagt wurde, dass ich könnte ... es ist wahrscheinlicher, dass neue Versionen von MSSQL die Syntax ändern. Zum Beispiel war es früher sys.object und sys.columns in den Versionen, in denen ich diese Technik zum ersten Mal benutzt habe. Angeblich sind die Methoden des Schemas und der gespeicherten Prozedur mehr Beweis dafür ... nicht sicher, aber so weit so gut. – 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

Willkommen bei SO!Aber es sieht so aus, als hätte diese Frage bereits vor drei Jahren eine befriedigende Antwort erhalten ... Wenn Sie Code veröffentlichen, verwenden Sie die {}, um sie hervorzuheben. Werfen Sie einen Blick auf die FAQ, es gibt einige gute Informationen zum Einstieg hier: http://stackoverflow.com/faq –

84

Dies ist der einfachste Weg,

exec sp_columns [tablename] 
+0

Dies ist kurz und einfach, sollte die richtige Antwort sein. Ich stelle mir vor, dass es nicht existierte, als die Frage ursprünglich gestellt wurde :) – DanteTheSmith

2

Warum dies gerade nicht versuchen:

rechts auf der Registerkarte klicken le -> Skripttabelle As -> Erstellen nach -> Neuer Abfrageeditor Fenster?

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

+3

Der Autor wollte wahrscheinlich wissen, wie man die Spaltennamen von der Tabelle programmatisch zur Verwendung in einer gespeicherten Prozedur oder einem anderen Skript erhält. – KLee1

+1

Die Antwort lautet: "Ich möchte diese als Daten zurückgeben", während Ihre Antwort die Werte erhält, ist es wahrscheinlich, dass das OP die Daten zur Laufzeit möchte. – StuperUser

4

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%' 
8

Dies ist ein wenig einfacher dann die oben genannten Vorschläge scheint, weil es die OBJECT_ID() Funktion verwendet die Tabellen-ID zu suchen. Jede Spalte mit dieser ID ist Teil der Tabelle.

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

Ich benutze häufig eine ähnliche Abfrage, um zu sehen, ob eine Spalte Ich weiß Teil einer neueren Version vorliegt 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 
-3
set fmtonly on 
select * from yourTable 
0

benutze ich nur eine Abfrage wie Martin Smith erwähnt, nur etwas kürzer:

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

Die folgende scheint oben wie die erste vorgeschlagene Abfrage zu sein, aber irgendwann müssen Sie die Datenbank angeben um es zur Arbeit zu bringen.Beachten Sie, dass die Abfrage auch ohne Angabe des 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' 
0

Während @Gulzar Nazim Antwort groß ist, ist es wahrscheinlich einfacher, gehören die Datenbanknamen in der Abfrage, die durch die folgende SQL erreicht werden könnte .

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

Da SysColumns is deprecated verwenden 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 wird user_type_id = ID des Typs ergeben. Dies ist einzigartig in der Datenbank. Für Systemdatentypen: user_type_id = system_type_id.

1

Sie können den folgenden Code verwenden, um alle Spaltennamen zu drucken; Sie können auch den Code ändern andere Details drucken in welcher auch immer Format u

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 

So verwenden Sie den gleichen Code wie die Tabelle und ihre Spaltennamen wie C# Klasse drucken die Verwendung Code unten:

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 

Ausgang:

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

versuchen diese

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; 
Verwandte Themen