0
DECLARE @count INT;
WITH CTE AS
(SELECT...)
SELECT @count = COUNT(ID) FROM CTE;
SELECT * FROM CTE

我可以在第一个表达式后使用 CTE 表SELECT @count = COUNT(ID) FROM CTE吗?我收到错误Invalid object name 'CTE'. 我正在使用 SQL Server 2008。

谢谢

4

2 回答 2

4

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

DECLARE @count INT;

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

SELECT @count = @@ROWCOUNT;

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

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

如果您出于其他原因需要计数,请描述它们。

于 2013-04-12T13:45:46.113 回答
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
于 2013-04-12T13:45:51.213 回答