这个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)
为什么?
答案 0 :(得分:8)
只做
DECLARE @dt DATETIME;
SET @dt = GETDATE();
WITH A
AS (SELECT TOP 1000 *
FROM dbo.SomeTable)
SELECT *
FROM A;
PRINT DATEDIFF(SS, GETDATE(), @dt);
CTE定义后唯一有效的是使用它的单个语句
答案 1 :(得分:2)
CTE必须后跟一个引用部分或全部CTE列的SELECT,INSERT,UPDATE或DELETE语句。 CTE也可以在CREATE VIEW语句中指定,作为视图的定义SELECT语句的一部分。
答案 2 :(得分: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以正确计算。