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

2

CTE の後には、一部またはすべての CTE 列を参照する単一の SELECT、INSERT、UPDATE、または DELETE ステートメントが続く必要があります。CTE は、ビューの定義 SELECT ステートメントの一部として CREATE VIEW ステートメントで指定することもできます。

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() の場所を交換して、秒の正の変化を取得します。正しく計算するには、select の前に SET @dt を使用します。

于 2013-10-09T12:12:33.913 に答える