我有一个表值函数,它选择行作为CTE的一部分,然后我想在CTE中没有选择行的情况下对返回的表执行不同的select / insert:
WITH myCte AS (SELECT * FROM abc WHERE xyz = 123)
IF NOT EXISTS (SELECT * FROM myCte)
BEGIN
...
END
然而,每当我在NOT EXISTS条件下使用CTE表时,我都会收到语法错误。我的myCte比示例复杂得多,因此将整个查询放在条件中会很尴尬。
如何在条件检查中使用CTE结果?
答案 0 :(得分:0)
您需要在将使用它的上下文中声明common table expression,并且它只能用于with
后面的语句。如果要多次使用结果,可以多次重复公用表表达式,也可以使用表变量或临时表来保存结果。
WITH myCte AS (SELECT * FROM abc WHERE xyz = 123)
select *
into #myTempTable
from myCte
IF NOT EXISTS (SELECT * FROM #myTempTable)
BEGIN
...
END