Tsql 通用表表达式错误

Tsql 通用表表达式错误,tsql,Tsql,我需要使用CTE重写一些简单的select语句查询。在遇到如下查询之前,我一直没有遇到任何问题: USE AdventureWorks2012 GO DECLARE @TotalRows INT SELECT @TotalRows = COUNT(CustomerID) FROM Sales.Customer WHERE CustomerID IN (SELECT CustomerID FROM Sales.SalesOrderHeader); SELECT @TotalRows AS 'T

我需要使用CTE重写一些简单的select语句查询。在遇到如下查询之前,我一直没有遇到任何问题:

USE AdventureWorks2012
GO
DECLARE @TotalRows INT 
SELECT @TotalRows = COUNT(CustomerID)
FROM Sales.Customer
WHERE CustomerID IN (SELECT CustomerID FROM Sales.SalesOrderHeader);

SELECT @TotalRows AS 'T'
我像下面一样重写了它,但我得到了错误

DECLARE @TotalRows INT 
;WITH TotalRows
(
SELECT @TotalRows = COUNT(CustomerID)
FROM Sales.Customer
WHERE CustomerID IN (SELECT CustomerID FROM Sales.SalesOrderHeader))
SELECT * FROM TotalRows

如何使用CTE实现这一点?

如果您确实需要使用CTE(我看不到附加值),这应该可以:

DECLARE @TotalRows INT; 

WITH TotalRows 
     AS (SELECT C.* 
         FROM   Sales.Customer C
         WHERE  CustomerID IN (SELECT CustomerID 
                               FROM   Sales.Salesorderheader)) 
SELECT @TotalRows = Count(CustomerID) 
FROM   TotalRows 

为什么要在毫无意义的地方创建CTE?正如我所解释的,这是一项要求,只是因为它是主要存储过程的一部分。你好,Tim,谢谢。但是我得到了以下错误:Msg 107,级别15,状态1,第4行列前缀“C”与查询中使用的表名或别名不匹配。Msg 8155,级别16,状态2,第3行“TotalRows”的第1列未指定列名。@dLight:这只是(缺少的)表别名,我已编辑了答案。