;with CTEima(PersonId,IsEmployeeActive)
as
(select count(*)
from custom.viwSSAppsEmpMasterExtended vem
where vem.SupervisorPersonId = @p_PersonId
union all
select CTEima.IsEmployeeActive
from Custom.viwSSAppsEmpMasterExtended vem
join CTEima on CTEima.PersonId = vem.SupervisorPersonId
)
set @v_IsManager = (select count(*)from CTEima where IsEmployeeActive = 'Y')
Run Code Online (Sandbox Code Playgroud)
在这里我收到关键字'set'附近的错误语法错误
告诉我如何将CTE中的值设置为变量
Pre*_*red 11
您无法SET在SELECT语句中使用关键字设置值.您可以将查询中的字段分配给语句中的变量SELECT:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
Run Code Online (Sandbox Code Playgroud)
在这种情况下,SELECT列表中的所有文件都应该分配给变量!
或者,您可以通过关键字将单个行 - 单列 SELECT语句的结果分配给变量SET:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Run Code Online (Sandbox Code Playgroud)
你不能混合上面的选项.
此外,CTE是单个的执行范围内定义的SELECT,INSERT,UPDATE,或DELETE语句.(http://msdn.microsoft.com/en-us/library/ms175972.aspx).SET不是SELECT/ INSERT/ UPDATE/ DELETE语句,这就是SQL Server报告语法错误的原因(CTE不能在SET语句的范围内定义.)
您的示例查询的解决方案
;WITH CTEima(PersonId,IsEmployeeActive) AS
( SELECT COUNT(*)
FROM custom.viwSSAppsEmpMasterExtended vem
WHERE vem.SupervisorPersonId = @p_PersonId
UNION ALL
SELECT CTEima.IsEmployeeActive
FROM Custom.viwSSAppsEmpMasterExtended vem
JOIN CTEima on CTEima.PersonId = vem.SupervisorPersonId
)
SELECT @v_IsManager = COUNT(*)
FROM CTEima
WHERE IsEmployeeActive = 'Y'
Run Code Online (Sandbox Code Playgroud)