Réponses:
Je ne sais pas s'il existe un moyen plus simple dans la version 2008.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
C'est le moyen le plus simple
exec sp_columns [tablename]
Quelque chose comme ça?
sp_columns @table_name=your table name
Une méthode consiste à interroger 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
colonne redondante, cependant :)
Cela semble un peu plus facile que les suggestions ci-dessus car il utilise la fonction OBJECT_ID () pour localiser l'id de la table. Toute colonne avec cet identifiant fait partie de la table.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
J'utilise couramment une requête similaire pour voir si une colonne dont je sais qu'elle fait partie d'une version plus récente est présente. Il s'agit de la même requête avec l'ajout de {AND name = 'YOUR_COLUMN'} à la clause where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
essaye ça
select * from <tablename> where 1=2
...............................................
WHERE 1=2
et qu'il renverra toujours les métadonnées de la colonne. Si vous utilisez une interface de programmation telle que ODBC, alors cette information de colonne est accessible en tant que liste / tableau à partir de l'objet curseur dans le programme, ce que je cherchais. Cela peut ne pas avoir de sens dans un contexte SQL pur, mais c'est une approche succincte lors de la connexion à une base de données via Python / Java / C / etc.
Ce qui suit ressemble à la première requête suggérée ci-dessus, mais vous devez parfois spécifier la base de données pour qu'elle fonctionne. Notez que la requête doit également fonctionner sans spécifier la TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Pourquoi ne pas simplement essayer ceci:
faites un clic droit sur le tableau -> Script Table As -> Create To -> New Query Editor Window?
La liste complète des colonnes est donnée dans le script. Copiez-le et utilisez les champs si nécessaire.
"I want to return these as data"
que, bien que votre réponse obtienne les valeurs, il est probable que l'OP souhaite les données lors de l'exécution.
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
Je ne sais pas si la valeur syscolumns.colid est la même que la valeur 'ORDINAL_POSITION' renvoyée dans le cadre de sp_columns, mais dans ce qui suit, je l'utilise de cette façon - j'espère que je ne désinforme pas ...
Voici une légère variation sur certaines des autres réponses que j'ai trouvées - J'utilise cela parce que la `` position '' ou l'ordre de la colonne dans le tableau est important dans mon application - j'ai essentiellement besoin de savoir `` Comment s'appelle la colonne (n) ?
sp_columns retourne tout un tas de trucs superflus, et je suis plus pratique avec une sélection que les fonctions T-SQL, alors j'ai choisi cette voie:
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
Bien que la réponse de @Gulzar Nazim soit excellente, il est probablement plus facile d'inclure le nom de la base de données dans la requête, ce qui pourrait être obtenu par le SQL suivant.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
Vous pouvez utiliser le code ci-dessous pour imprimer tous les noms de colonne; Vous pouvez également modifier le code pour imprimer d'autres détails dans le format que vous souhaitez
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
Production
column1
column2
column3
column4
Pour utiliser le même code pour imprimer la table et son nom de colonne en tant que classe C #, utilisez le code ci-dessous:
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
Production:
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"; } }
}
J'utilise juste une requête comme Martin Smith l'a mentionné, juste un peu plus courte:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Étant donné que SysColumns est obsolète , utilisez 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
donnera user_type_id = ID
le type. C'est unique dans la base de données. Pour les types de données du système: 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;
SI vous travaillez avec postgresql, il est possible que plusieurs schémas aient une table du même nom dans ce cas, appliquez la requête ci-dessous
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;