公用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命令有类似的要求。