1
为什么此CTE会给出错误消息?无法从CTE中删除 - MSG 4405
;with del as (
SELECT t1.*
FROM t1
INNER JOIN t2
ON t1.tid = t2.tid
)
DELETE del;
它给人的错误信息
Msg 4405, Level 16, State 1, Line 5 View or function 't' is not updatable because the modification affects multiple base tables.
完全相同的语法同样适用于一个更新,而不是删除。
编辑:相同的语法工作如果t2不是一个基表,而是一个基于常量的cte基地。
http://sqlfiddle.com/#!6/dcc10/2
错误消息是相当不言自明的:你不能从两个表中删除。您的更新可能工作,因为它只影响其中一个表中的列。 –
@ArronBertrand:但CTE数据只来自1个表 – jmoreno
数据来自一个连接,这可能意味着在结果中存在多于一行,并且t1中具有相同的主键。 –