Anda tidak dapat menetapkan nilai dengan SET
kata kunci di SELECT
pernyataan. Anda dapat menetapkan bidang dari kueri ke variabel di SELECT
pernyataan:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
Dalam hal ini semua file dalam daftar SELECT harus ditetapkan ke variabel!
Atau Anda dapat menetapkan satu baris-satu kolom SELECT
hasil pernyataan ke variabel dengan SET
kata kunci:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
Anda tidak dapat mencampur opsi di atas.
Selanjutnya, CTE didefinisikan dalam lingkup eksekusi dari satu SELECT
, INSERT
, UPDATE
, atau DELETE
penyataan. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
bukan SELECT
/INSERT
/UPDATE
/DELETE
pernyataan, inilah mengapa SQL Server melaporkan kesalahan sintaks (CTE tidak dapat ditentukan dalam cakupan pernyataan SET.)
Solusi dengan contoh kueri Anda
;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'