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. (http://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'