Expression de Table commune, pourquoi point-virgule?

Habituellement, dans la clause SQL Server Common Table Expression, il y a un point-virgule devant l'instruction, comme ceci:

;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

Pourquoi?

46
demandé sur gotqn 2011-08-04 12:05:31

1 réponses

  • Pour éviter toute ambiguïté, car AVEC peut être utilisé ailleurs
    ..FROM..WITH (NOLOCK)..
    RESTORE..WITH MOVE..
  • Il est facultatif de terminer les instructions avec ; dans SQL Server

Mis ensemble, l'instruction précédente doit être terminée avant un avec/CTE. Pour éviter les erreurs, la plupart des gens utilisent ;WITH parce que nous ne savons pas ce qui est avant le CTE

Donc

DECLARE @foo int;

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

Est le même que

DECLARE @foo int

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

La commande MERGE a une exigence similaire.

68
répondu gbn 2011-08-04 08:22:54