;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')
这里我遇到了类似的错误 关键字“set”附近的语法不正确
告诉我如何将 CTE 中的值设置为变量
您不能在
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 报告语法错误的原因(不能在 SET 语句的范围内定义 CTE。)
示例查询的解决方案
;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'
将最后一行替换为:
select @v_IsManager = count(*) from CTEima where IsEmployeeActive = 'Y'
;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'
DECLARE @a int
SET @A = 1234
;
WITH CTE
AS (SELECT
Col1,
col2
FROM xyz
WHERE Col1 = @A),
dt
AS (SELECT
@A Col1)
SELECT
*
FROM dt d
LEFT JOIN CTE vd
ON vd.col1 = d.col1