公用expression式,为什么是分号?

通常在SQL Server公共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 

为什么?

  • 为了避免歧义,因为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命令有类似的要求。