Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何将cte值分配给变量_Sql Server 2008 - Fatal编程技术网

Sql server 2008 如何将cte值分配给变量

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

这里我得到的错误是 关键字“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
 )
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'