Не можете да задавате стойности с SET
ключова дума в SELECT
Можете или да присвоите полетата от заявката на променливи в SELECT
изявление:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
В този случай всички полета в списъка SELECT трябва да бъдат присвоени на променлива!
Или можете да зададете един ред-единична колона SELECT
резултатът от израза към променлива от SET
ключова дума:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Не можете да смесвате горните опции.
Освен това, CTE се дефинира в рамките на обхвата на изпълнение на един SELECT
, INSERT
, UPDATE
или DELETE
изявление. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
не е SELECT
/INSERT
/UPDATE
/DELETE
ето защо SQL Server отчита синтактична грешка (CTE не могат да бъдат дефинирани в обхвата на оператора SET.)
Решението с вашата примерна заявка
;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'