执行SELECT *
时,SQL Server如何确定列的顺序?
我知道“订购依据”对于订购数据至关重要,但我希望列名称保持一致。
注意:我的代码不取决于返回列的实际顺序。我只是想知道SQL Server如何决定订购列名。
在我的团队使用的大约20台计算机中,其中一台的行为不同。任何差异都值得研究。打开SQL Server Management Studio时,列名称排序对于所有计算机都是相同的。当我的应用程序进行查询时,我就会看到差异。
我正在使用SQL Server 2008和SQL Server 2008 R2。我的应用程序使用C#System.Data.SqlClient来访问数据库。
编辑: 我的问题原来是其中一台计算机配置为以“sa”身份登录,而不是以预期用户身份登录。当我们打算查看视图时,查询直接命中了表。感谢您了解有关sys.columns的帮助
答案 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 *
不保证输出列的排序。