Answers:
不知道在2008版本中是否有更简单的方法。
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
一种方法是查询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
列是多余的,但:)
这似乎比上面的建议要容易一些,因为它使用OBJECT_ID()函数来查找表的ID。具有该ID的任何列都是表的一部分。
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
我通常使用类似的查询来查看是否存在我所知道的属于较新版本的列。这是相同的查询,在where子句中附加了{AND name ='YOUR_COLUMN'}。
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 / etc连接到数据库时,这是一种简洁的方法。
以下内容似乎与上述第一个建议的查询类似,但是有时您必须指定数据库才能使其正常工作。请注意,查询也应在不指定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"
,尽管您的答案将获得值,但OP可能希望在运行时获取数据。
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
我不确定syscolumns.colid值是否与作为sp_columns的一部分返回的'ORDINAL_POSITION'值相同,但是在接下来的操作中,我将以这种方式使用它-希望我不要误会...
这是我发现的其他一些答案的细微变化-我使用它是因为表中列的“位置”或顺序在我的应用程序中很重要-我基本上需要知道“列(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
您可以使用以下代码来打印所有列名;您还可以修改代码以使用您喜欢的任何格式打印其他详细信息
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"; } }
}
我只使用马丁·史密斯(Martin Smith)提到的查询,只是简短一点:
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
。