Du kan inte ställa in värden med SET
nyckelord i SELECT
Du kan antingen tilldela fälten från frågan till variabler i SELECT
uttalande:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
I detta fall bör alla filer i SELECT-listan tilldelas en variabel!
Eller så kan du tilldela en enkel rad-enkel kolumn SELECT
satsens resultat till en variabel med SET
nyckelord:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Du kan inte blanda alternativen ovan.
Dessutom definieras CTE inom exekveringsomfånget för en enda SELECT
, INSERT
, UPDATE
, eller DELETE
påstående. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
är inte en SELECT
/INSERT
/UPDATE
/DELETE
Detta är anledningen till att SQL Server rapporterar ett syntaxfel (CTE:er kan inte definieras inom ramen för SET-satsen.)
Lösningen med din exempelfråga
;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'