Antworten:
Ich bin mir nicht sicher, ob es in der Version 2008 einen einfacheren Weg gibt.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Dies ist der einfachste Weg
exec sp_columns [tablename]
Etwas wie das?
sp_columns @table_name=your table name
Eine Methode besteht darin, syscolumns abzufragen:
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
Objtype
Spalte jedoch überflüssig :)
Dies scheint etwas einfacher zu sein als die obigen Vorschläge, da die Funktion OBJECT_ID () zum Auffinden der Tabellen-ID verwendet 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 festzustellen, ob eine Spalte vorhanden ist, von der ich weiß, dass sie Teil einer neueren Version 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
Versuche dies
select * from <tablename> where 1=2
...............................................
WHERE 1=2
und es weiterhin die Spalten-Metadaten zurückgibt . Wenn Sie eine programmatische Schnittstelle wie ODBC verwenden, können Sie auf diese Spalteninformationen als Liste / Array über das Cursorobjekt im Programm zugreifen, nach dem ich gesucht habe. In einem reinen SQL-Kontext ist dies möglicherweise nicht sinnvoll, aber es ist ein prägnanter Ansatz, wenn eine Verbindung zu einer Datenbank über Python / Java / C / etc. Hergestellt wird.
Das Folgende scheint wie die erste vorgeschlagene Abfrage oben 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'
Warum versuchen Sie es nicht einfach so:
Klicken Sie mit der rechten Maustaste auf die Tabelle -> Skripttabelle als -> Erstellen bis -> Neues Abfrageeditorfenster?
Die gesamte Liste der Spalten wird im Skript angegeben. Kopieren Sie es und verwenden Sie die Felder nach Bedarf.
"I want to return these as data"
, während Ihre Antwort die Werte erhält, möchte das OP die Daten wahrscheinlich zur Laufzeit.
USE[Database]
SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo'
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 =@TableName
order by ORDINAL_POSITION
END
END
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 - ich hoffe, ich informiere mich nicht falsch ...
Hier ist eine kleine Abweichung von einigen der anderen Antworten, die ich gefunden habe - ich verwende diese, weil die 'Position' oder Reihenfolge der Spalte in der Tabelle in meiner Anwendung wichtig ist - ich muss im Grunde wissen, wie Spalte (n) heißt ? '
sp_columns gibt eine ganze Reihe von irrelevanten Dingen zurück, und ich bin handlicher mit ausgewählten als T-SQL-Funktionen, also 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
Während die Antwort von @Gulzar Nazim großartig ist, ist es wahrscheinlich einfacher, den Datenbanknamen in die Abfrage aufzunehmen, was 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'
Mit dem folgenden Code können Sie alle Spaltennamen drucken. Sie können den Code auch ändern, um andere Details in einem beliebigen Format zu drucken
declare @Result varchar(max)='
'
select @Result=@Result+''+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
Verwenden Sie den folgenden Code, um denselben Code zum Drucken der Tabelle und ihres Spaltennamens wie die C # -Klasse zu verwenden:
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"; } }
}
Ich benutze nur eine Abfrage wie Martin Smith erwähnt, nur etwas kürzer:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
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
wird user_type_id = ID
vom Typ ergeben. Dies ist innerhalb der Datenbank eindeutig. Für Systemdatentypen : user_type_id = system_type_id
.
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
Wenn Sie mit postgresql arbeiten, besteht die Möglichkeit, dass mehr als ein Schema eine Tabelle mit demselben Namen hat. In diesem Fall wenden Sie die folgende Abfrage an
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;