2011-08-04 26 views
40

通常在SQL Server公共表表達式子句有分號在語句的前面,就像這樣:公用表達式,爲什麼是分號?

;WITH OrderedOrders AS --semicolon here 
(
    SELECT SalesOrderID, OrderDate, 
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' 
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60 

爲什麼?

回答

61
  • 爲了避免歧義,因爲與其他地方可以使用
    ..FROM..WITH (NOLOCK)..
    RESTORE..WITH MOVE..
  • 它是可選的終止與;語句在SQL Server

放在一起,前面的語句必須之前被終止WITH/CTE。爲了避免錯誤,大多數人使用;WITH,因爲我們不知道什麼是前CTE

所以

DECLARE @foo int; 

WITH OrderedOrders AS 
(
    SELECT SalesOrderID, OrderDate, 
...; 

相同

DECLARE @foo int 

;WITH OrderedOrders AS 
(
    SELECT SalesOrderID, OrderDate, 
...; 

的MERGE命令有類似的規定。

+0

快速簡潔的答案,非常好。我會帶我半天或半英里的頁面(稍微誇張,但不要太多)。將英語作爲第二語言講話的'好處'... –

+6

對於較新的版本 - 'SQL Server文檔指示不終止帶有分號的T-SQL語句是不推薦使用的功能。這意味着長遠目標是在產品的未來版本中強制使用分號。「 - 由Itzik Ben-Gan提供的Miscrosoft SQL Server 2012 T-SQL基礎知識。」 – gotqn

相關問題