Общее выражение таблицы, почему точка с запятой?

Обычно в выражении 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

Почему?

+40
источник поделиться
1 ответ
  • Чтобы избежать двусмысленности, потому что WITH можно использовать в другом месте
    ..FROM..WITH (NOLOCK)..
    RESTORE..WITH MOVE..
  • Он необязателен для завершения операторов с ; в SQL Server

Соединяясь, предыдущий оператор должен быть прерван перед WITH/CTE. Чтобы избежать ошибок, большинство людей используют ;WITH, потому что мы не знаем, что есть перед CTE

So

DECLARE @foo int;

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

совпадает с

DECLARE @foo int

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

Команда MERGE имеет аналогичное требование.

+60
источник

Посмотрите другие вопросы по меткам или Задайте вопрос