Nie możesz ustawić wartości za pomocą SET
słowo kluczowe w SELECT
oświadczenie.Możesz przypisać pola z zapytania do zmiennych w SELECT
oświadczenie:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
W tym przypadku wszystkie pola na liście SELECT powinny być przypisane do zmiennej!
Możesz też przypisać pojedynczy wiersz-pojedyncza kolumna SELECT
wynik instrukcji do zmiennej przez SET
słowo kluczowe:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Nie możesz mieszać powyższych opcji.
Ponadto CTE jest zdefiniowane w zakresie wykonania pojedynczego SELECT
, INSERT
, UPDATE
lub DELETE
oświadczenie. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
nie jest SELECT
/INSERT
/UPDATE
/DELETE
instrukcji, dlatego SQL Server zgłasza błąd składni (CTE nie mogą być zdefiniowane w zakresie instrukcji SET).
Rozwiązanie z przykładowym zapytaniem
;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'