更新CTE“结果”失败,因为它包含派生字段或常量字段

时间:2018-11-29 05:55:19

标签: sql sql-server tsql sql-server-2008 sql-server-2008-r2

我的CTE如下:

;with cte as (field1, field2, field3)

我需要从此CTE中选择记录,但是在我需要对该CTE中的列之一进行一些更新之前,该更新基于标量函数的输出(它将返回1或0作为输出。 (位)),我在下面的案例声明中使用它;

 ;with cte as (field1, field2, field3)
 update cte
 set field1 = (select 
                     case when dbo.scalarFunction (@parm1,@parm2) = 0
                        then 'New Value'
                        else cte.field1 
                     end)
 from cte
 where field2 = 'some filter' and field3 = 'some filter'

 select * from cte

执行此操作时,出现以下错误;

  

视图或函数“结果”的更新或插入失败,因为它包含派生或常量字段。

有人可以建议如何更新我的cte,然后在cte中查看更新的记录

1 个答案:

答案 0 :(得分:1)

也许您可以在select而不是update命令中进行更改-

;with cte as (field1, field2, field3)
 select
    field1 = (case when field2 = 'some filter' and field3 = 'some filter' then
                (case when dbo.scalarFunction (@parm1,@parm2) = 0
                    then 'New Value'
                    else cte.field1 
                end)
            else field1 end)
    ,field2
    ,field3
 from cte