我想在MS SQL中对列进行排序。我有一个表格看起来像下面的表格,我的要求是对它进行排序,这可以通过“列名称”按顺序轻松完成,但如何以排序的方式永久保存它,我的意思是我不只是想要使用select语句查看已排序的数据实际上我想对此视图进行永久性更改。
Marks Roll number Name
44 5 Mike
22 2 Robin
44 1 Jack
34 3 a
22 4 b
预期:
22 2 Robin
22 4 b
34 3 a
44 1 Jack
44 5 Mike
答案 0 :(得分:4)
你不能。关系数据库没有对表中的行进行排序的概念。如果需要有序输出,则必须使用ORDER BY
子句。这是一个基本事实,不是你可以解决的问题。
在SQL Server 2000中,在(本质上)错误中,Microsoft允许视图具有ORDER BY
子句,该子句确实对输出进行了排序。但是,在SQL Server 2005中,这种情况发生了变化,因为以这种方式进行操作从来都不是正确的。
您可以尝试使用SELECT TOP (2147483647) * FROM dbo.Blah B ORDER BY B.Col;
技巧,但这也不会在SQL Server的更高版本中删除它。 TOP
的排序行为是副作用,而不是主效应,并且不应该依赖于视图。做得正确并将排序放在应该的位置:在表示层或提交给数据库的最终外部查询中(ala SELECT Columns FROM dbo.View ORDER BY X;
)。
关于不对表中的行进行排序的更多信息:是的,存在聚簇索引,但由于以下几个原因,您无法依赖返回的数据:
有一种简单,可靠且必需方式来获取有序行集:ORDER BY
。