2013-04-12 82 views
0
DECLARE @count INT; 
WITH CTE AS 
(SELECT...) 
SELECT @count = COUNT(ID) FROM CTE; 
SELECT * FROM CTE 

我可以在第一次表达SELECT @count = COUNT(ID) FROM CTE后使用CTE表吗?我得到错误Invalid object name 'CTE'. 我使用SQL Server 2008的如何多次使用WITH结果表?

感谢

+0

你是什么意思多次?加入使用消息或其他选择语句? –

+0

@J W我需要一个更多的选择语句 –

+0

不幸的是你不能。 'CTE'只能从一个语句中有效,可以多次连接,但不能在另一个语句中使用。 –

回答

2

您可以使用表变量并在任何地方使用它。

DECLARE @count INT; 
DECLARE @CTE AS TABLE (<<columns>>) 

INSERT INTO @CTE (<<columns>>) 
SELECT .... 

WITH CTE AS 
(SELECT * FROM @CTE) 
SELECT @count = COUNT(ID) FROM CTE; 

SELECT * FROM @CTE 
4

你不能,真的; CTE仅存在于单个语句的范围内。然而,在这种情况下,你可以这样做:

DECLARE @count INT; 

WITH CTE AS (SELECT...) 
SELECT * FROM CTE; 

SELECT @count = @@ROWCOUNT; 

如果需要计数作为结果集的一部分,那么你可以说:

WITH CTE AS (SELECT...) 
SELECT *, COUNT(*) OVER() FROM CTE; 

如果需要其他原因的计数,请描述他们。

相关问题