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。
由于
答案 0 :(得分:4)
你不能,真的; CTE仅存在于单个语句的范围内。但是在这种情况下你可以这样做:
DECLARE @count INT;
WITH CTE AS (SELECT...)
SELECT * FROM CTE;
SELECT @count = @@ROWCOUNT;
如果您需要将计数作为结果集的一部分,那么您可以说:
WITH CTE AS (SELECT...)
SELECT *, COUNT(*) OVER() FROM CTE;
如果由于其他原因需要计数,请描述它们。
答案 1 :(得分: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