2011-08-04 14 views
40

通常SQL Server共通表式句で文の前にあるセミコロンは、次のように、そこにある:共通テーブル式、なぜセミコロン?

;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..

  • を使用することができるので

  • 答えて

    61
    • は、それは一緒に入れて

    は、前のステートメントを前に終了しなければならないSQL Serverで;でステートメントを終了するには、オプションですあいまいさを避けるために、 WITH/CTE。エラーを回避するために、我々はCTE

    前にあるかわからないので、ほとんどの民族が;WITHを使用するので、

    DECLARE @foo int; 
    
    WITH OrderedOrders AS 
    (
        SELECT SalesOrderID, OrderDate, 
    ...; 
    

    は、MERGEコマンドは、同様の要件があり

    DECLARE @foo int 
    
    ;WITH OrderedOrders AS 
    (
        SELECT SalesOrderID, OrderDate, 
    ...; 
    

    と同じです。

    +0

    すばやく簡潔な回答です。非常にうれしいです。私の場合、半日、半マイルページ(わずかに誇張されていますが、それほど多くはありません)のいずれかになります。 ... –

    +6

    新しいバージョンの場合 - 'SQL Serverのドキュメントでは、セミコロンで終了するT-SQLステートメントが廃止された機能ではないことが示されています。これは、長期的な目標が、製品の将来のバージョンでセミコロンの使用を強制することであることを意味する。 - Itzik Ben-GanによるMiscrosoft SQL Server 2012 T-SQLの基礎。 – gotqn

    関連する問題