2010-06-09 107 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爲ON時,不會返回count(表示受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. 像MSSQL(T-SQL)
  5. 「上NOCOUNT設置」,在前面的語句防止數字,則返回一個int作爲結束日期參數減去創建日期爲「天」
4
  1. 看起來從返回的行中選擇的行。 「關閉設置」再次關閉(行數將返回)。
  2. 除非用圓括號括起來,否則列名稱中不能有空格。
  3. 我假設CreationDate是一個日期字段。該語句將返回@endDate參數和CreationDate字段之間的天數(以整數形式)。