2013-09-23 50 views
2

如何知道MS-SQL中表格中的列位置。
例如:如果一个表由3列组成,即column1,column2和column3。
我应该写一查询,这样我可以得到栏3的位置列表在表格中的位置

+0

如果您想选择COLUMN1前栏3那么你可以使用SELECT语句来实现这一点。 – hims056

+2

在SQL中,尽可能多地忽略列的“位置” - 列由*名称*引用,而不是位置。你试图解决什么样的问题?找到列的位置似乎是你的解决方案的一部分? –

回答

0

尝试:

SELECT ORDINAL_POSITION 
FROM information_schema.columns 
WHERE table_name = 'YourTableName' AND COLUMN_NAME = 'YourColumnName' 
+0

+和schema_name = ... !!! –

1

你会得到所有这些从INFORMATION_SCHEMA。

select ordinal_position from information_schema.columns 
where schema_name = 'databasename' 
and table_name = 'tablename' 
and column_name = 'column name' 
+2

您必须在您的查询中包含schema_name,可能会有两个名称为'tablename'的表在不同的架构中 –

+0

@RomanPekar:感谢您的快速通知。编辑答案 –

1

这里有两种方法可以做到这一点:

select colid 
from sys.syscolumns 
where id = object_id('schemaname.tablename') and name = 'column3' 

select ordinal_position 
from information_schema.columns 
where 
    schema_name = 'schemaname' and 
    table_name = 'tablename' and 
    column_name = 'column3' 

这里是为什么你必须避免INFORMATION_SCHEMA视图的一篇文章 - The case against INFORMATION_SCHEMA views,我没有经常写这种类型的查询,所以我并不真正关心它,但sys.syscolumns往往会更快一些,因为它没有许多冗余连接,您可能不需要这些连接。

OTOH,INFORMATION_SCHEMA视图是ISO标准 - 在这里的这个dicussion - SQL Server: should I use information_schema tables over sys tables?

0

尝试查询和检查结果。

选择列名,从INFORMATION_SCHEMA.COLUMNS ORDINAL_POSITION 其中TABLE_CATALOG = 'yourdatabasename' 和TABLE_SCHEMA = 'yourschemaname' 和TABLE_NAME = 'yourtablename'