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'