帮助存储过程

时间:2010-06-09 18:08:57

标签: sql mysql

我在看这个网站:

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
  5. 谢谢!

3 个答案:

答案 0 :(得分:4)

  1. 看起来像MSSQL(T-SQL)
  2. 上一个语句中的“设置nocount on”可防止返回选定的行数。 “设置nocount off”再次将其关闭(将返回行数)。
  3. 除非用括号括起来,否则列名中不能有空格。
  4. 我假设CreationDate是一个日期字段。此语句将返回@endDate参数和CreationDate字段之间的天数(作为整数)。

答案 1 :(得分:2)

1。它是Microsoft SQL Azure Database,但语法(Transact-SQL或T-SQL)与SQL Server相同(因为Azure数据库“基于SQL Server技术”)。

2。这在T-SQL documentation for SET NOCOUNT

中有所描述
  

当SET NOCOUNT为ON时,不返回计数(表示受Transact-SQL语句影响的行数)。

3。如果列名包含任何会使解析器混淆的字符,则需要在列名周围放置方括号。在这种情况下,由于空间的原因,这是必要的。

4。为了理解CONVERT(int, @endDate - CreationDate) as Days,我们将它分成更小的部分并单独处理:

  • @endDate - CreationDate计算最近一个帖子与用户帐户创建日期之间的时间。这给出了用户帐户在最后一次数据转储中存在的时间。

  • CONVERT(int, @endDate - CreationDate)将之前计算的结果转换为以天为单位的整数。

  • as Days是别名,因此结果易于阅读。

答案 2 :(得分:1)

  1. MSSQL
  2. NOCOUNT OFF表示您不希望返回受影响的行总数。请参阅http://msdn.microsoft.com/en-us/library/ms189837.aspx
  3. 将“ID”列作为“用户链接”返回(因空格而需要括号)。
  4. 返回int作为结束日期参数减去创建日期为“Days”