如何使用SQL Server 2008返回表的列名?即一个表包含这些列 - id,name,address,country,我想将这些作为数据返回。
答案 0 :(得分:362)
不确定2008版本是否有更简单的方法。
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
答案 1 :(得分:100)
这是最简单的方法
exec sp_columns [tablename]
答案 2 :(得分:31)
这样的东西?
sp_columns @table_name=your table name
答案 3 :(得分:13)
一种方法是查询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
答案 4 :(得分:9)
这似乎比上面的建议容易一些,因为它使用 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
答案 5 :(得分:7)
试试这个
select * from <tablename> where 1=2
...............................................
答案 6 :(得分:4)
我用
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%'
答案 7 :(得分:4)
以下似乎与上面的第一个建议查询类似,但有时您必须指定数据库才能使其工作。请注意,查询也应该可以在不指定TABLE_SCHEMA:
的情况下工作SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
答案 8 :(得分:2)
为什么不尝试这个:
右键点击表格 - &gt;脚本表为 - &gt;创建至 - &gt;新查询编辑器 窗口?
脚本中给出了整个列列表。复制它并根据需要使用字段。
答案 9 :(得分:2)
USE[Database]
SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo'
答案 10 :(得分:1)
我不确定syscolumns.colid值是否与作为sp_columns的一部分返回的'ORDINAL_POSITION'值相同,但在下面我使用它的方式 - 希望我不会误导... < / p>
我发现的其他一些答案略有不同 - 我使用这个,因为表中列的'位置'或顺序在我的应用程序中很重要 - 我基本上需要知道'什么是列( 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
答案 11 :(得分:1)
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
答案 12 :(得分:1)
您可以使用以下代码打印所有列名称;您也可以修改代码,以您喜欢的格式打印其他详细信息
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"; } }
}
答案 13 :(得分:0)
如果您使用的是postgresql,则在这种情况下,可能有多个模式具有相同名称的表,请应用以下查询
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;
答案 14 :(得分:0)
自SysColumns is deprecated起,请使用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
。
答案 15 :(得分:0)
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
答案 16 :(得分:0)
虽然@Gulzar Nazim的答案很好,但在查询中包含数据库名称可能更容易,这可以通过以下SQL实现。
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
答案 17 :(得分:0)
我只是使用像马丁史密斯提到的查询,只是简短一点:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
答案 18 :(得分:-3)
set fmtonly on
select * from yourTable