1

此 sql 有效:

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

 SELECT * FROM A

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

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

 DECLARE @dt DATETIME 

 SET @dt = GETDATE()
 SELECT * FROM A

 PRINT DATEDIFF(SS,GETDATE(),@dt)

为什么?

4

3 回答 3

10

做就是了

DECLARE @dt DATETIME;

SET @dt = GETDATE();

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

PRINT DATEDIFF(SS, GETDATE(), @dt);

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

于 2013-10-09T12:09:17.843 回答
2

CTE 后面必须跟一个引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 语句。CTE 也可以在 CREATE VIEW 语句中指定为视图的定义 SELECT 语句的一部分。

http://msdn.microsoft.com/en-us/library/ms175972.aspx

于 2013-10-09T12:12:45.993 回答
0
DECLARE @dt DATETIME 

SET @dt = GETDATE()

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

SELECT * FROM A

PRINT DATEDIFF(SS,@dt,GETDATE())

这对我来说很好,交换 @dt 和 GETDATE() 的位置以获得秒的积极变化。在选择之前设置 @dt 以正确计算。

于 2013-10-09T12:12:33.913 回答