Sql server 2008 如何将cte值分配给变量
这里我得到的错误是 关键字“set”附近的语法不正确Sql server 2008 如何将cte值分配给变量,sql-server-2008,Sql Server 2008,这里我得到的错误是 关键字“set”附近的语法不正确 告诉我如何将CTE中的值设置为变量将最后一行替换为: ;with CTEima(PersonId,IsEmployeeActive) as (select count(*) from custom.viwSSAppsEmpMasterExtended vem where vem.SupervisorPersonId = @p_PersonId union all select CTEima.IsEmployeeActive
告诉我如何将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
)
set @v_IsManager = (select 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'
不能在SELECT语句中使用set关键字设置值。 您可以将查询中的字段分配给SELECT语句中的变量:
select @v_IsManager = count(*) from CTEima where IsEmployeeActive = 'Y'
在这种情况下,选择列表中的所有文件都应分配给一个变量
或者,您可以通过SET关键字将单行单列SELECT语句的结果分配给变量:
您不能混合使用上述选项
此外,CTE是在单个SELECT、INSERT、UPDATE或DELETE语句的执行范围内定义的。SET不是SELECT/INSERT/UPDATE/DELETE语句,这就是SQL Server报告无法在SET语句范围内定义语法错误CTEs的原因
使用示例查询的解决方案
声明@a int
设置@A=1234
;
使用CTE
作为选择
Col1,
可乐
来自xyz
其中Col1=@A,
dt
作为选择
@感冒
挑选
*
来自dt d
左连接CTE vd
在vd.col1=d.col1上
WITH CTE AS (
/** .. Your Query Here .. **/
)
SELECT
@YourVariable = FieldNameOrSubquery -- In short: Expression
FROM
CTE
SET @YourVariable = (SELECT COUNT(1) FROM YourTable).
;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'