Подтвердить что ты не робот

Удалить строки из CTE в SQL SERVER

У меня есть CTE, который является оператором select в таблице. Теперь, если я удалю 1 строку из CTE, удалит ли эту строку из моей базовой таблицы?

Также это тот же случай, если у меня есть таблица temp вместо CTE?

4b9b3361

Ответ 1

Проверяя документацию DELETE, да, вы можете использовать CTE для удаления, и это повлияет на базовая таблица. Аналогично для операторов UPDATE...

Также это тот же случай, если у меня есть таблица temp вместо CTE?

Нет, удаление из таблицы temp будет влиять только на таблицу temp - нет соединения с таблицей (-ами), из которой получены данные, временная таблица является автономным объектом.

Ответ 2

Вы можете думать о CTE как о подзапросе, у него нет таблицы temp внизу.
Итак, если вы запустите команду delete для CTE, вы удалите строки из таблицы. Конечно, если SQL может определить, какая таблица для удаленной/удаленной базы на вашем CTE. В противном случае вы увидите сообщение об ошибке.

Если вы используете временную таблицу и вы удаляете из нее строки, то исходная таблица не будет затронута, поскольку временная таблица и исходная таблица не имеют никакой корреляции.

Ответ 3

В тех случаях, когда у вас есть подзапрос, который соединяет несколько таблиц, и вам нужно использовать его в нескольких местах, тогда можно использовать таблицу cte и temp. Если вы, однако, хотите удалить записи на основе условия суб-запроса, то cte - это путь. Иногда вы можете просто использовать инструкцию delete с необходимостью cte, так как это оператор delete, и только строки, удовлетворяющие условиям запроса, удаляются, даже если для фильтрации используются несколько условий.