web-dev-qa-db-fra.com

Comment renvoyez-vous les noms de colonne d'une table?

Comment renvoyer les noms de colonne d'une table à l'aide de SQL Server 2008? c'est-à-dire qu'une table contient ces identifiants de colonnes, nom, adresse, pays et je souhaite les renvoyer sous forme de données.

207
Belliez

Pas sûr s'il y a un moyen plus facile dans la version 2008.

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

C'est le moyen le plus simple

exec sp_columns [tablename]
98
DiggDev

Quelque chose comme ça?

sp_columns @table_name=your table name
30
Paul Lefebvre

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
12
splattne

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 que je connais fait partie d'une version plus récente est présente. C'est 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
9
HogHunter

essaye ça 

select * from <tablename> where 1=2

...............................................

J'utilise 

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%'
4
Scott K.

Ce qui suit semble être comme la première requête suggérée ci-dessus, mais vous devez parfois spécifier la base de données pour la faire fonctionner. Notez que la requête devrait également fonctionner sans spécifier le paramètre TABLE_SCHEMA:

SELECT COLUMN_NAME
FROM   YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
4
Edi Mohseni

Pourquoi ne pas simplement essayer ceci:

clic droit sur la table -> Table de script en tant que -> Créer pour -> Nouvel éditeur de requête La fenêtre?

La liste complète des colonnes est donnée dans le script. Copiez-le et utilisez les champs si nécessaire.

2
angieb1008

USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'

2
Deepan Kanugula

Vous pouvez utiliser le code ci-dessous pour imprimer tous les noms de colonnes. Vous pouvez également modifier le code pour imprimer d’autres détails dans le format souhaité.

    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

Sortie

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

Sortie:

 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"; } }

 } 
1
Atal Kishore
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
1
Rishikesh

Je ne sais pas si la valeur syscolumns.colid est identique à la valeur 'ORDINAL_POSITION' renvoyée dans sp_columns, mais dans la suite, je l'utilise de cette façon. J'espère que je ne désinforme pas ...

Voici une légère variation de certaines des autres réponses que j'ai trouvées - je l'utilise parce que la "position" ou l'ordre de la colonne dans le tableau est importante dans mon application - j'ai essentiellement besoin de savoir "comment s'appelle la colonne (n) ? '

sp_columns retourne un tas de choses superflues, et comme je suis plus à l'aise avec les fonctions select qu'avec T-SQL, je me suis donc engagé dans 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 
1
Jake
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE  Table_name = 'MxLocations';
SELECT @col;
0
M Thiyanithi

Je viens d'utiliser une requête comme Martin Smith mentionné, juste un peu plus courte:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
0
Marcel Grolms

Puisque 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 du type. C'est unique dans la base de données. Pour les types de données système: user_type_id = system_type_id

0
Denzil Boggs
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
0
Vishal Kiri

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 avec le code SQL suivant.

SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
0
user1036719