Обновление оператора в cte с подзапросом - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть CTE, который в основном фильтрует данные на основе определенных критериев, дело в том, что после фильтрации мне нужно обновить эти записи, чтобы «исправить» их, но я получаю 4104 в операторе UPDATE.

Когда я вызываю переменную напрямую, у меня нет проблем, но когда я делаю вычисления, я получаю ошибку, потому что я вызываю переменные из первого и второго запроса.

;WITH CTE AS
(
    SELECT ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY timestmp ASC) order,
    *
    FROM TSTSOLAP T
    (
        --SECOND QUERY
        SELECT 1 FROM TABLE1 T2 
        WHERE --CONDITIONS MET
            t.user_id = t2.id_user AND
            T.ID_TIP = T2.ID_TIP AND
            T.ID <> t2.ID AND 
            (T2.BEG BETWEEN T.BEG AND T.END)
            OR T2.BEG = T.END
    )

)
UPDATE CTE SET STAT=0, END = (T2.END - 1) --HERE IS WHERE I GET THE: Msg 4104, Level 16, State 1, Line 1
WHERE ORDER> 1
GO

Как можноЯ называю несвязанные переменные?

* Код сокращен из-за длины

1 Ответ

0 голосов
/ 08 февраля 2019

Как насчет просто сделать JOIN?

WITH toupdate AS (
      SELECT . . . ,
             ? as order
      FROM table1
     )
UPDATE T
    SET STAT = 0,
        END = (T2.END - 1)
    FROM T JOIN
         table2 T2 
         ON . . . <conditions here>
WHERE T.ORDER > 1;

В зависимости от ваших условий в подзапросе, вам все равно может понадобиться и условие EXISTS.

...