2011-08-04 38 views
40

Thông thường trong SQL Server khoản biểu thức bảng chung có dấu chấm phẩy ở phía trước của tuyên bố, như thế này:Biểu thức bảng chung, tại sao dấu chấm phẩy?

;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 

Tại sao?

Trả lời

61
  • Để tránh sự nhập nhằng vì VỚI thể được sử dụng ở những nơi khác
    ..FROM..WITH (NOLOCK)..
    RESTORE..WITH MOVE..
  • Đó là tùy chọn để chấm dứt tuyên bố với ; trong SQL Server

Đặt lại với nhau, báo cáo kết quả trước đó phải được chấm dứt trước một WITH/CTE. Để tránh sai sót, hầu hết dân gian sử dụng ;WITH bởi vì chúng tôi không biết là gì trước khi CTE

Vì vậy

DECLARE @foo int; 

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

cũng giống như

DECLARE @foo int 

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

Lệnh MERGE có một yêu cầu tương tự.

+0

Câu trả lời ngắn gọn và súc tích, rất hay. Tôi sẽ đưa tôi hoặc nửa ngày dài hoặc nửa dặm (hơi phóng đại, nhưng không quá nhiều). Các 'lợi ích' của việc nói tiếng Anh như một ngôn ngữ thứ hai ... –

+6

Đối với phiên bản mới hơn - 'Tài liệu SQL Server chỉ ra rằng không chấm dứt các câu lệnh T-SQL với dấu chấm phẩy là một tính năng không được chấp nhận. Điều này có nghĩa là mục tiêu dài hạn là thực thi việc sử dụng dấu chấm phẩy trong phiên bản tương lai của sản phẩm.' - 'Nguyên tắc cơ bản về T-SQL SQL Server 2012 của Itzik Ben-Gan.' – gotqn

Các vấn đề liên quan