我正在查看一些代码并且遇到了一些我不熟悉的东西;谷歌没有证明结果很有成效,所以我想知道是否有人可以解释以下代码的作用?它没有引用我的任何表或数据库,所以我假设它是通用代码,我不需要提供我的数据库布局?非常感谢。
代码:
SELECT ROW_NUMBER() OVER (ORDER BY Object_ID) AS weeks
FROM SYS.OBJECTS
答案 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
视图中的行数将根据为数据库定义的对象而改变,那么为什么有人会这样做呢?
如果需要一个简单的序列号列表,有更多可预测的方法来获取它们。