这个SELECT语句有什么作用?

时间:2012-03-17 14:46:41

标签: sql sql-server database select

我正在查看一些代码并且遇到了一些我不熟悉的东西;谷歌没有证明结果很有成效,所以我想知道是否有人可以解释以下代码的作用?它没有引用我的任何表或数据库,所以我假设它是通用代码,我不需要提供我的数据库布局?非常感谢。

代码:

SELECT  ROW_NUMBER() OVER (ORDER BY Object_ID) AS weeks 
                FROM    SYS.OBJECTS 

2 个答案:

答案 0 :(得分:2)

它将选择从1到N的数字,其中N是sys.objects中的行数。它不保证排序顺序。

在假设sys.objects中至少有52行的情况下,这段代码可能是为了提供所有周数(omg!)。

但是,此代码将返回超过52行,并且不保证对结果进行排序。我建议你摆脱这种肮脏。

编辑:作为替代方案,我会选择创建下表:CREATE TABLE Weeks (WeekNumber TINYINT NOT NULL PrimaryKey)并正确填写。这比从sys.objects中选择要快得多,因为这个自定义表格会更小并且排序正确。

答案 1 :(得分:0)

开发人员正在使用系统表sysobjects中的记录来使用ROW_NUMBER()窗口函数获取序列号列表,并将列别名为“Weeks”。 sys.objects视图中的行数将根据为数据库定义的对象而改变,那么为什么有人会这样做呢?

如果需要一个简单的序列号列表,有更多可预测的方法来获取它们。