Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

come assegnare il valore cte alla variabile

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'