从SQL SERVER中的CTE中删除行

时间:2011-05-15 18:09:10

标签: sql sql-server tsql

我有一个CTE,它是一个表上的select语句。现在,如果我从CTE中删除1行,它会从我的基表中删除该行吗?

如果我有一个临时表而不是CTE,也是同样的情况吗?

3 个答案:

答案 0 :(得分:18)

检查DELETE statement documentation,您可以使用CTE删除它,它将影响基础表。同样对于UPDATE语句......

  

如果我有一个临时表而不是CTE,也是同样的情况吗?

不,从临时表中删除只会影响临时表 - 没有与数据来自的表的连接,临时表是一个独立的对象。

答案 1 :(得分:3)

您可以将CTE视为子查询,它下面没有临时表 因此,如果对CTE运行delete语句,则会从表中删除行。当然,如果SQL可以根据您的CTE推断出哪个表是upadte / delete。否则你会看到一个错误。

如果使用临时表,并从中删除行,则源表不会受到影响,因为临时表和原始表没有任何关联。

答案 2 :(得分:0)

如果你有一个子查询说连接多个表,你需要在多个地方使用它,那么可以使用cte和temp表。但是,如果您想根据子查询条件删除记录,那么cte就是您的选择。有时你可以简单地使用不需要cte的delete语句,因为它是一个delete语句,只有满足查询条件的行才会被删除,即使有多个条件用于过滤。