Vous ne pouvez pas définir de valeurs avec le SET
mot-clé dans le SELECT
instruction.Vous pouvez soit affecter les champs de la requête à des variables dans le SELECT
déclaration :
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
Dans ce cas, tous les champs de la liste SELECT doivent être affectés à une variable !
Ou vous pouvez attribuer une seule ligne-seule colonne SELECT
résultat de l'instruction à une variable par le SET
mot-clé :
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Vous ne pouvez pas mélanger les options ci-dessus.
De plus, CTE est défini dans le périmètre d'exécution d'un seul SELECT
, INSERT
, UPDATE
, ou DELETE
déclaration. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
n'est pas un SELECT
/INSERT
/UPDATE
/DELETE
, c'est pourquoi SQL Server signale une erreur de syntaxe (les CTE ne peuvent pas être définis dans la portée de l'instruction SET.)
La solution avec votre exemple de requête
;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'