使用WITH语句时无法定义SQL变量

Yos*_*ari 1 sql sql-server common-table-expression sql-server-2008

这个sql是有效的:

 WITH A AS
 (SELECT TOP 1000 * 
  FROM dbo.SomeTable)

 SELECT * FROM A
Run Code Online (Sandbox Code Playgroud)

虽然这个给出错误(关键字'DECLARE'附近的语法不正确):

WITH A AS
(SELECT TOP 1000 * 
 FROM dbo.SomeTable)

 DECLARE @dt DATETIME 

 SET @dt = GETDATE()
 SELECT * FROM A

 PRINT DATEDIFF(SS,GETDATE(),@dt)
Run Code Online (Sandbox Code Playgroud)

为什么?

Mar*_*ith 8

做就是了

DECLARE @dt DATETIME;

SET @dt = GETDATE();

WITH A
     AS (SELECT TOP 1000 *
         FROM   dbo.SomeTable)
SELECT *
FROM   A;

PRINT DATEDIFF(SS, GETDATE(), @dt);
Run Code Online (Sandbox Code Playgroud)

CTE定义后唯一有效的东西是使用它的单个语句

  • @Yosi - 您的用例似乎是基于对CTE实际工作方式的基本误解.它们只是内联到以下查询中.它们没有提前实现并提前评估. (2认同)