Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

como atribuir valor cte a variável


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'