Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

comment attribuer une valeur cte à une variable

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'