Você não pode definir valores com o
SET
palavra-chave no SELECT
Você pode atribuir os campos da consulta a variáveis no SELECT
demonstração:WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
Neste caso, todos os campos da lista SELECT devem ser atribuídos a uma variável!
Ou você pode atribuir uma única linha-única coluna
SELECT
resultado da instrução para uma variável pelo SET
palavra-chave:SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Você não pode misturar as opções acima.
Além disso, o CTE é definido dentro do escopo de execução de um único
SELECT
, INSERT
, UPDATE
, ou DELETE
demonstração. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
não é um SELECT
/INSERT
/UPDATE
/DELETE
instrução, é por isso que o SQL Server relata um erro de sintaxe (os CTEs não podem ser definidos no escopo da instrução SET). A solução com sua consulta de exemplo
;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'