U kunt geen waarden instellen met de SET
trefwoord in de SELECT
statement.U kunt de velden van de query toewijzen aan variabelen in de SELECT
verklaring:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
In dit geval moeten alle bestanden in de SELECT-lijst worden toegewezen aan een variabele!
Of u kunt een enkele rij-enkele kolom toewijzen SELECT
resultaat van de instructie naar een variabele met de SET
zoekwoord:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
U kunt de bovenstaande opties niet combineren.
Bovendien wordt CTE gedefinieerd binnen het uitvoeringsbereik van een enkele SELECT
, INSERT
, UPDATE
, of DELETE
uitspraak. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
is geen SELECT
/INSERT
/UPDATE
/DELETE
instructie, dit is de reden waarom SQL Server een syntaxisfout meldt (CTE's kunnen niet worden gedefinieerd in het bereik van de SET-instructie.)
De oplossing met uw voorbeeldquery
;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'