Відповіді:
Не впевнений, чи є простіший варіант у версії 2008 року.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Це найпростіший спосіб
exec sp_columns [tablename]
Щось на зразок цього?
sp_columns @table_name=your table name
Одним із методів є запит на системні стовпці:
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
стовпчик є надлишковим :)
Це здається трохи простішим, ніж наведені вище пропозиції, оскільки він використовує функцію OBJECT_ID () для пошуку ідентифікатора таблиці. Будь-який стовпець із цим ідентифікатором є частиною таблиці.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Я зазвичай використовую подібний запит, щоб перевірити, чи є стовпець, який я знаю, частиною нової версії. Це той самий запит із додаванням {AND name = 'YOUR_COLUMN'} до пункту where.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
спробуйте це
select * from <tablename> where 1=2
...............................................
WHERE 1=2
і він все одно поверне метадані стовпців. Якщо використовується програмний інтерфейс, такий як ODBC, то ця інформація стовпця є доступною у вигляді списку / масиву від об'єкта курсору в межах програми, що саме я шукав. Це може не мати сенсу в чистому контексті SQL, але це стислий підхід під час підключення до бази даних через Python / Java / C / тощо.
Наступне, здається, схоже на перший запропонований запит вище, але колись вам потрібно вказати базу даних, щоб змусити її працювати. Зауважте, що запит також повинен працювати, не вказуючи TABLE_SCHEMA:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Чому б просто не спробувати це:
клацніть правою кнопкою миші на таблиці -> Таблиця сценаріїв як -> Створити до -> Вікно редактора нових запитів?
Весь список стовпців наведено в сценарії. Скопіюйте його та використовуйте поля за потребою.
"I want to return these as data"
, хоча ваша відповідь отримає значення, ймовірно, ОП хоче отримати дані під час виконання.
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
Я не впевнений, чи значення syscolumn.colid таке ж, як значення "ORDINAL_POSITION", повернене як частина sp_column, але в подальшому я використовую це таким чином - сподіваюся, я не дезінформую ...
Ось невелика зміна деяких інших відповідей, які я знайшов - я використовую це, оскільки "позиція" або порядок стовпця в таблиці важливі в моїй програмі - я в основному повинен знати "Що називається стовпцем (n) ? '
sp_column повертає цілу купу сторонніх речей, і я зручніший із функціями Select, ніж 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
Хоча відповідь @Gulzar Nazim чудова, можливо, простіше включити ім'я бази даних у запит, що може бути досягнуто наступним SQL.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
Ви можете використовувати код нижче, щоб надрукувати всі назви стовпців; Ви також можете змінити код для друку інших деталей у будь-якому форматі
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"; } }
}
Я просто використовую запит, як згадував Мартін Сміт, трохи коротше:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Оскільки 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
.
Якщо ви працюєте з postgresql, існує ймовірність, що більше однієї схеми може мати таблицю з таким самим іменем, у такому випадку застосуйте нижченаведений запит
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;