2017-04-01 43 views
0

我有一個表值函數,它選擇行作爲CTE的一部分,然後如果在CTE中沒有選擇行,我希望在返回的表中執行不同的select/insert:在IF NOT EXISTS中使用WITH CTE

WITH myCte AS (SELECT * FROM abc WHERE xyz = 123) 

IF NOT EXISTS (SELECT * FROM myCte) 
BEGIN 
    ... 
END 

但是,無論何時我在NOT EXISTS條件中使用CTE表,我都會遇到語法錯誤。我的myCte比這個例子複雜得多,所以將整個查詢置於條件中將會很尷尬。

如何在狀態檢查中使用CTE結果?

+1

已經回答了在http://stackoverflow.com/questions/39576785/using-if-exists-with-a-cte – walshy002000

+0

沒有關係 - 我覺得複雜的查詢是這樣的邏輯移動到一個好兆頭應用代碼。數據庫負責讀取和寫入數據 - 而不是處理它。 – Fabio

回答

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