当您执行`SELECT *`时,SQL Server如何确定列的顺序?

时间:2012-04-18 16:49:28

标签: sql sql-server-2008 sql-server-2008-r2

执行SELECT *时,SQL Server如何确定列的顺序?

我知道“订购依据”对于订购数据至关重要,但我希望列名称保持一致。

注意:我的代码取决于返回列的实际顺序。我只是想知道SQL Server如何决定订购列名。

在我的团队使用的大约20台计算机中,其中一台的行为不同。任何差异都值得研究。打开SQL Server Management Studio时,列名称排序对于所有计算机都是相同的。当我的应用程序进行查询时,我就会看到差异。

我正在使用SQL Server 2008和SQL Server 2008 R2。我的应用程序使用C#System.Data.SqlClient来访问数据库。

编辑: 我的问题原来是其中一台计算机配置为以“sa”身份登录,而不是以预期用户身份登录。当我们打算查看视图时,查询直接命中了表。感谢您了解有关sys.columns的帮助

2 个答案:

答案 0 :(得分:16)

它们在系统视图column_id中的大小为sys.columns

您可以通过以下方式查看:

SELECT column_id, name
FROM sys.columns
WHERE object_id = Object_id('MyTableName')
ORDER BY column_id

修改

这是给Dems的。您应该在更大的表上进行测试,但看起来它使用的是表中定义的顺序,而不是索引:

CREATE TABLE #T (cola int, colb int, colc int)

INSERT INTO #T
VALUES
(1,2,3),
(2,3,4),
(4,5,6)

SELECT * FROM #T

CREATE INDEX ix_test ON #T (colb, colc, cola)

SELECT * FROM #t
WHERE colb > 0

DROP TABLE #T

答案 1 :(得分:4)

它们与Sql Server Management Studio中出现的顺序相同;基本上,它们的创建顺序。

确保所需列顺序的“正确”解决方案是在SELECT语句中明确指定字段。 SELECT *不保证输出列的排序。