Du kan ikke indstille værdier med SET
søgeord i SELECT
sætning. Du kan enten tildele felterne fra forespørgslen til variabler i SELECT
erklæring:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
I dette tilfælde skal alle filer i SELECT-listen tildeles en variabel!
Eller du kan tildele en enkelt række-enkelt kolonne VÆLG
sætningens resultat til en variabel med SET
søgeord:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Du kan ikke blande ovenstående muligheder.
Ydermere er CTE defineret inden for eksekveringsomfanget af en enkelt SELECT
, INSERT
, OPDATERING
eller SLET
udmelding. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
er ikke en SELECT
/INDSÆT /
OPDATERING
/SLET
Dette er grunden til, at SQL Server rapporterer en syntaksfejl (CTE'er kan ikke defineres inden for SET-sætningens omfang.)
Løsningen med din eksempelforespørgsel
;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'