;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
)
set @v_IsManager = (select count(*)from CTEima where IsEmployeeActive = 'Y')
here i am getting error like Incorrect syntax near the keyword 'set'
tell me how to set values from CTE into variable
DECLARE is a statement. A CTE is an expression. In SQL, expressions are contained within statements, and never the other way around. Unless you are trying to make a view, you should be able to just put your DECLARE statements before the statement that contains your CTE's.
If your CTE is based on a single table then you can update using CTE, which in turn updates the underlying table.
You cannot index a CTE, but the approach is that the CTE can make use of the underlying indexes. In the above query, a JOIN b cannot make use of an index on t.
You can also use CTE to insert data into the SQL table. The CTE query definition includes the required data that you can fetch from existing tables using joins. Later, query CTE for inserting data into the target table.
You can not set values with the SET
keyword in the SELECT
statement.
You could either assign the fields from the query to variables in the SELECT
statement:
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
In this case all fields in the SELECT
list should be assigned to a variable!
Or you can assign a single row-single column SELECT
statement's result to a variable by the SET
keyword:
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
You can not mix the above options.
Furthermore, CTE is defined within the execution scope of a single SELECT
, INSERT
, UPDATE
, or DELETE
statement. (http://msdn.microsoft.com/en-us/library/ms175972.aspx). SET
is not a SELECT
/INSERT
/UPDATE
/DELETE
statement, this is why SQL Server reports a syntax error (CTEs can not be defined in the scope of the SET statement.)
The solution with your example query
;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'
Replace your last line with this:
select @v_IsManager = count(*) from CTEima where IsEmployeeActive = 'Y'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With