16

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

我知道“排序依据”对于排序数据至关重要,但我希望列名是一致的。

注意:我的代码依赖于返回列的实际顺序。我只想知道 SQL Server 如何决定对列名进行排序。

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

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

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

4

2 回答 2

17

column_id从系统视图来看,它们的顺序是sys.columns

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

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

编辑

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

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
于 2012-04-18T16:53:23.927 回答
4

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

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

于 2012-04-18T16:51:54.533 回答