Не удалось обновить 'результат' cte, поскольку он содержит производное или постоянное поле - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть cte, как показано ниже;

;with cte as (field1, field2, field3)

Мне нужно выбрать записи из этого CTE, но прежде чем мне нужно будет сделать некоторые обновления в одном из столбцов в этом CTE, и это обновление основанона выходе из скалярной функции (он вернет 1 или 0 в качестве выходного (бит)), который я использую в выражении case, как показано ниже:

 ;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

Когда я выполняю это, я получаю ошибку ниже;

Не удалось обновить или вставить представление или функцию 'result', поскольку она содержит производное или постоянное поле.

Может кто-нибудь дать совет, как обновить мой cte, а затемсм. обновленные записи в cte

1 Ответ

0 голосов
/ 29 ноября 2018

Может быть, вы можете сделать это изменения в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...