如何返回表的列名?

我如何返回一个表的列名使用SQL Server 2008?即一个表包含这些列- id,名称,地址,国家,我想返回这些数据。

615244 次浏览

像这样的东西?

sp_columns @table_name=your table name

不确定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

我不确定syscolumns。colid值与作为sp_columns一部分返回的'ORDINAL_POSITION'值相同,但在接下来的内容中,我将以这种方式使用它-希望我没有误导…

这是我发现的一些其他答案的轻微变化-我使用这个是因为表中列的“位置”或顺序在我的应用程序中很重要-我基本上需要知道“列(n)被称为什么?”

sp_columns返回一大堆无关的东西,我使用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
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

这是最简单的方法

exec sp_columns [tablename]

为什么不试试这个呢:

右击表->脚本表As -> Create To ->新建查询编辑器 窗户吗?< / p >

脚本中给出了整个列列表。复制它并根据需要使用字段。

我使用

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%'

这似乎比上面的建议更简单,因为它使用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
set fmtonly on
select * from yourTable

我用了马丁·史密斯提到的问题,简短一点:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'

下面的查询看起来像上面建议的第一个查询,但有时您必须指定数据库才能使其工作。注意,查询在没有指定TABLE_SCHEMA的情况下也可以工作:

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

虽然@Gulzar Nazim的回答很好,但在查询中包含数据库名称可能更容易,这可以通过下面的SQL实现。

SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
USE [Database]


SELECT TABLE_NAME,
TABLE_SCHEMA,
[Column_Name],
[Data_type]
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_SCHEMA = 'dbo'
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

您可以使用下面的代码打印所有列名;您还可以修改代码以打印您喜欢的任何格式的其他细节

    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 * from <tablename> where 1=2

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

DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE  Table_name = 'MxLocations';
SELECT @col;

如果你正在使用postgresql,有可能不止一个模式有相同名称的表,在这种情况下应用下面的查询

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;