No puede establecer valores con SET palabra clave en el SELECT instrucción. Puede asignar los campos de la consulta a las variables en el SELECT declaración:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
¡En este caso, todos los campos de la lista SELECT deben asignarse a una variable!
O puede asignar una fila única-columna única SELECT resultado de la declaración a una variable por el SET palabra clave:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
No puede mezclar las opciones anteriores.
Además, CTE se define dentro del ámbito de ejecución de un solo SELECT , INSERT , UPDATE o DELETE declaración. (https://msdn.microsoft.com/en-us/library/ms175972.aspx). SET no es un SELECT /INSERT /UPDATE /DELETE esta es la razón por la cual SQL Server informa un error de sintaxis (los CTE no se pueden definir en el alcance de la declaración SET).
La solución con tu consulta de ejemplo
;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'