2010-06-09 4 views
2

я ищу на этом сайте:помощь с хранимой процедурой

http://cloudexchange.cloudapp.net/stackoverflow/s/84/rising-stars-top-50-users-ordered-on-rep-per-day

set nocount on 

DECLARE @endDate date 
SELECT @endDate = max(CreationDate) from Posts 

set nocount off 

SELECT TOP 50 
    Id AS [User Link], Reputation, Days, 
    Reputation/Days AS RepPerDays 
FROM (
    SELECT *, 
     CONVERT(int, @endDate - CreationDate) as Days 
    FROM Users 
) AS UsersAugmented 
WHERE 
    Reputation > 5000 
ORDER BY 
    RepPerDays DESC 

я также новичок в SQL. У меня есть следующие вопросы об этом коде:

  1. это mysql или mssql?
  2. что это делает? set nocount off
  3. Почему это в скобках? [User Link]
  4. что это делает? CONVERT(int, @endDate - CreationDate) as Days

спасибо!

ответ

2

1. Это Microsoft SQL Azure Database, но синтаксис (Transact-SQL или T-SQL) такая же, как для SQL Server (потому что Azure База данных "на основе технологий SQL Server").

2. Это описано в T-SQL documentation for SET NOCOUNT.

Когда SET NOCOUNT включен, подсчет (с указанием количества строк, на которые влияет инструкция Transact-SQL) не возвращается.

3. Вам нужно поместить квадратные скобки вокруг имени столбца, если в нем есть символ, который смущает парсер. В этом случае это необходимо из-за пространства.

4. Чтобы понять раскол CONVERT(int, @endDate - CreationDate) as Days давайте его на более мелкие куски и обрабатывать их по отдельности:

  • @endDate - CreationDate вычисляет время между последней должности и даты, что учетная запись пользователя была создана. Это дает время, в течение которого учетная запись пользователя существовала до последнего дампа данных.

  • CONVERT(int, @endDate - CreationDate) преобразует результат предыдущего вычисления в целое число, измеренное в днях.

  • as Days - это псевдоним, чтобы результат был легко читаемым.

1
  1. MSSQL
  2. NOCOUNT OFF говорится, что вы не хотите, чтобы иметь общее количество строк возвращается. См. http://msdn.microsoft.com/en-us/library/ms189837.aspx
  3. Возвращает столбец «ID» как «Пользовательская ссылка» (скобки, требуемые из-за пробела).
  4. Возвращает Int в качестве параметра даты окончания минус даты создания как «Дни»
4
  1. выглядит как MSSQL (T-SQL)
  2. «Установить NOCOUNT на» в предыдущем заявлении препятствует ряд из строк, которые выбраны из возвращаемого. «Set nocount off» снова выключает это (количество строк будет возвращено).
  3. Вы не можете иметь пробелы в именах столбцов, если вы не окружите их скобками.
  4. Я предполагаю, что CreationDate - это поле даты. Этот оператор вернет число дней (как целое число) между параметром @endDate и полем CreationDate.
Смежные вопросы