sql >> Base de Datos >  >> RDS >> Sqlserver

cómo asignar valor cte a la variable

No puede establecer valores con SET palabra clave en el SELECT instrucción. Puede asignar los campos de la consulta a las variables en el SELECT declaración:

WITH CTE AS (
  /** .. Your Query Here .. **/
)
SELECT
  @YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
  CTE

¡En este caso, todos los campos de la lista SELECT deben asignarse a una variable!

O puede asignar una fila única-columna única SELECT resultado de la declaración a una variable por el SET palabra clave:

SET @YourVariable = (SELECT COUNT(1) FROM YourTable).

No puede mezclar las opciones anteriores.

Además, CTE se define dentro del ámbito de ejecución de un solo SELECT , INSERT , UPDATE o DELETE declaración. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET no es un SELECT /INSERT /UPDATE /DELETE esta es la razón por la cual SQL Server informa un error de sintaxis (los CTE no se pueden definir en el alcance de la declaración SET).

La solución con tu consulta de ejemplo

;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'