【发布时间】:2018-03-14 21:49:17
【问题描述】:
在 SSMS 2016 中,我创建了一个 CTE,然后在语句之后立即从 CTE 中删除一些行。
WITH cte AS
(
SELECT [GroupID], [UserID]+0.5, [Value] from dbo.myTable
)
DELETE FROM cte WHERE concat(GroupID, UserID) in (select concat(GroupID, UserID) as Concat from cte group by GroupID)
但是,我想将剩余的行然后INSERT 放入现有表中,但是当我尝试时,我收到以下错误:“Invalid object name 'cte'.”
我怀疑这个问题与 CTE 的工作方式有关。由于我对他们很陌生,我不确定,但似乎 CTE 只能在 WITH AS? 之后立即被引用一次?真的吗?有没有解决的办法?如何从 CTE 插入数据?
我正在考虑以某种方式使用临时表,但我不知道是否真的有区别。
【问题讨论】:
-
这真的是你想做的吗?为什么不直接更新?为什么你甚至需要一个 cte 呢?这不是有效的语法。
-
如果您的目标是同一张表,您可能会使用与 MERGE 相关的 CTE
标签: tsql common-table-expression sql-server-2016