Как вы возвращаете имена столбцов таблицы? - PullRequest
219 голосов
/ 01 марта 2009

Как бы вернуть имена столбцов таблицы с использованием SQL Server 2008? то есть таблица содержит эти столбцы: идентификатор, имя, адрес, страну, и я хочу вернуть их как данные.

Ответы [ 19 ]

1 голос
/ 08 мая 2016

Вы можете использовать приведенный ниже код для печати всех имен столбцов; Вы также можете изменить код для печати других деталей в любом формате, который вам нравится

    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

выход

column1
column2
column3
column4

Чтобы использовать тот же код для печати таблицы и названия ее столбца, что и в классе C #, используйте следующий код:

    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

Выход:

 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 голос
/ 18 мая 2011

Я не уверен, совпадает ли значение syscolumns.colid со значением 'ORDINAL_POSITION', возвращаемым как часть sp_columns, но в дальнейшем я буду использовать его таким образом - надеюсь, я не дезинформирую ...

Вот небольшая разница в некоторых других ответах, которые я нашел - я использую это, потому что «позиция» или порядок столбца в таблице важны для моего приложения - мне нужно знать «Что такое столбец ( n) называется? '

sp_columns возвращает целую кучу посторонних вещей, и мне удобнее выбирать функции, чем функции T-SQL, поэтому я пошел по этому пути:

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 голос
/ 22 марта 2012
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
0 голосов
/ 28 декабря 2015

Поскольку SysColumns устарела , используйте 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 даст user_type_id = ID типа. Это уникально в базе данных. Для системных типов данных: user_type_id = system_type_id.

0 голосов
/ 17 октября 2015
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
0 голосов
/ 10 ноября 2014

Хотя ответ @Gulzar Nazim велик, вероятно, проще включить в запрос имя базы данных , чего можно добиться с помощью следующего SQL.

SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
0 голосов
/ 08 сентября 2014

Я просто использую запрос, как упоминал Мартин Смит, чуть короче:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
0 голосов
/ 29 ноября 2017
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE  Table_name = 'MxLocations';
SELECT @col;
0 голосов
/ 15 ноября 2013
set fmtonly on
select * from yourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...