Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

wie man der Variablen einen CTE-Wert zuweist

Mit SET können Sie keine Werte setzen Schlüsselwort im SELECT -Anweisung. Sie könnten entweder die Felder aus der Abfrage Variablen im SELECT zuweisen Aussage:

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

In diesem Fall sollten alle Felder in der SELECT-Liste einer Variablen zugewiesen werden!

Oder Sie können eine einzelne Zeile-einzelne Spalte zuweisen SELECT das Ergebnis der Anweisung durch SET in eine Variable Stichwort:

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

Sie können die oben genannten Optionen nicht mischen.

Darüber hinaus wird CTE innerhalb des Ausführungsbereichs eines einzelnen SELECT definiert , INSERT , UPDATE , oder DELETE Erklärung. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET ist kein SELECT /INSERT /UPDATE /DELETE Anweisung, deshalb meldet SQL Server einen Syntaxfehler (CTEs können nicht im Geltungsbereich der SET-Anweisung definiert werden.)

Die Lösung mit Ihrer Beispielabfrage

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