常用表表达式,为什么用分号?

时间:2011-08-04 08:05:32

标签: sql sql-server tsql sql-server-2008 common-table-expression

通常在SQL Server Common Table Expression子句中,语句前面有分号,如下所示:

;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

为什么?

1 个答案:

答案 0 :(得分:71)

  • 避免歧义,因为WITH可以在别处使用 ..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命令有类似的要求。