Non è possibile impostare valori con il SET
parola chiave nel SELECT
istruzione. Puoi assegnare i campi della query alle variabili in SELECT
dichiarazione:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
In questo caso tutti i file nell'elenco SELECT dovrebbero essere assegnati a una variabile!
Oppure puoi assegnare una singola riga-singola colonna SELECT
risultato dell'istruzione in una variabile da SET
parola chiave:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Non puoi combinare le opzioni di cui sopra.
Inoltre, CTE è definito nell'ambito dell'esecuzione di un singolo SELECT
, INSERT
, UPDATE
o DELETE
dichiarazione. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
non è un SELECT
/INSERT
/UPDATE
/DELETE
istruzione, ecco perché SQL Server segnala un errore di sintassi (non è possibile definire CTE nell'ambito dell'istruzione SET.)
La soluzione con la tua query di esempio
;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'