在IF NOT EXISTS中使用WITH CTE

时间:2017-04-01 07:26:11

标签: sql-server tsql common-table-expression not-exists

我有一个表值函数,它选择行作为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结果?

1 个答案:

答案 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