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.
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'
Dies ist der einfachste Weg
exec sp_columns [tablename]
Etwas wie das?
sp_columns @table_name=your table name
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
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
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%'
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'
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.
USE[Database]
SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo'
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"; } }
}
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
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
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
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'
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
.
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
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'