Что делает этот оператор SELECT? - PullRequest
3 голосов
/ 17 марта 2012

Я смотрю какой-то код и наткнулся на что-то крайне незнакомое мне; Google не оказался плодотворным для результатов, поэтому мне было интересно, кто-нибудь может объяснить, что делает следующий код? Он не относится ни к одной из моих таблиц или баз данных, поэтому я предполагаю, что это общий код, и мне не нужно указывать расположение моей базы данных? Спасибо большое.

код:

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

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Он выберет числа от 1 до N, где N - количество строк в sys.objects.Это не гарантирует порядок сортировки.

Вероятно, этот код предназначен для предоставления номеров всех недель (омг!) При условии, что в sys.objects есть как минимум 52 строки.

Этот код, однако, вернет более 52 строк, и результат не гарантированно будет упорядочен.Я рекомендую вам избавиться от этой злобности.

Редактировать: В качестве альтернативы я бы решил создать следующую таблицу: CREATE TABLE Weeks (WeekNumber TINYINT NOT NULL PrimaryKey) и заполнить ее соответствующим образом.Это будет даже быстрее, чем выбор из sys.objects, потому что эта пользовательская таблица будет меньше и будет правильно отсортирована.

0 голосов
/ 17 марта 2012

Разработчик использует записи в системной таблице sysobjects, чтобы получить список последовательных чисел с помощью оконной функции ROW_NUMBER() и присвоить столбцу псевдоним "Недели".Количество строк в представлении sys.objects будет меняться в зависимости от объектов, определенных в базе данных, поэтому, почему кто-то будет делать это, мне неизвестно ...

Если необходим простой список последовательных чисел, есть ещепредсказуемые способы их получения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...