Risposte:
Non sono sicuro che ci sia un modo più semplice nella versione 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Questo è il modo più semplice
exec sp_columns [tablename]
Qualcosa come questo?
sp_columns @table_name=your table name
Un metodo è quello di interrogare 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
Objtype
colonna ridondante, però :)
Questo sembra un po 'più semplice dei suggerimenti precedenti perché utilizza la funzione OBJECT_ID () per individuare l'id della tabella. Qualsiasi colonna con quell'id fa parte della tabella.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Uso comunemente una query simile per vedere se è presente una colonna che conosco fa parte di una versione più recente. È la stessa query con l'aggiunta di {AND name = 'YOUR_COLUMN'} alla clausola where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
prova questo
select * from <tablename> where 1=2
...............................................
WHERE 1=2
e restituirà comunque i metadati della colonna. Se si utilizza un'interfaccia programmatica come ODBC, le informazioni di questa colonna sono accessibili come elenco / matrice dall'oggetto cursore all'interno del programma, che è quello che stavo cercando. Potrebbe non avere senso in un contesto SQL puro, ma è un approccio sintetico quando ci si connette a un database tramite Python / Java / C / ecc.
Quanto segue sembra essere come la prima query suggerita sopra ma a volte è necessario specificare il database per farlo funzionare. Si noti che la query dovrebbe funzionare anche senza specificare TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Perché non provi questo:
fare clic con il tasto destro sulla tabella -> Tabella script come -> Crea in -> Nuova finestra dell'editor di query?
L'intero elenco di colonne è riportato nello script. Copialo e usa i campi come necessario.
"I want to return these as data"
, mentre la risposta otterrà i valori, è probabile che l'OP voglia i dati in fase di esecuzione.
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
Non sono sicuro che il valore syscolumns.colid sia uguale al valore "ORDINAL_POSITION" restituito come parte di sp_columns, ma in seguito lo sto usando in questo modo - spero di non essere male informato ...
Ecco una leggera variazione su alcune delle altre risposte che ho trovato - lo uso perché la 'posizione' o l'ordine della colonna nella tabella è importante nella mia applicazione - Fondamentalmente ho bisogno di sapere 'Come si chiama la colonna (n) ?'
sp_columns restituisce un sacco di cose estranee, e sono più maneggevole con una selezione di funzioni T-SQL, quindi ho seguito questa strada:
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
Sebbene la risposta di @Gulzar Nazim sia ottima, è probabilmente più facile includere il nome del database nella query, che potrebbe essere ottenuto dal seguente SQL.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
È possibile utilizzare il codice seguente per stampare tutti i nomi di colonna; Puoi anche modificare il codice per stampare altri dettagli nel formato che preferisci
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
Produzione
column1
column2
column3
column4
Per utilizzare lo stesso codice per stampare la tabella e il nome della colonna della classe C #, utilizzare il codice seguente:
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
Produzione:
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"; } }
}
Uso solo una query come menzionato Martin Smith, solo un po 'più breve:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Poiché SysColumns è obsoleto , utilizzare 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
produrrà user_type_id = ID
del tipo. Questo è unico nel database. Per i tipi di dati di sistema: 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;
SE stai lavorando con postgresql c'è la possibilità che più di uno schema possa avere una tabella con lo stesso nome in quel caso applicare la query qui sotto
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;