我有一個像下面SQL參數化查詢CTE
select *
from (
select *
from callTableFunction(@paramPrev)
.....< a whole load of other joins, wheres , etc >........
) prevValues
full join
(
select *
from callTableFunction(@paramCurr)
.....< a whole load of other joins, wheres , etc >........
) currValues on prevValues.Field1 = currValues.Field1
....<other joins with the same subselect as the above two with different parameters passed in
where ........
group by ....
以下子選擇是共同在查詢欄中所有的子查詢的@參數表函數的查詢。
select *
from callTableFunction(@param)
.....< a whole load of other joins, wheres , etc >........
一種選擇是對我來說,這個轉換成一個功能,調用函數,但我不喜歡這樣,因爲我可能會經常改變 子選擇查詢或.....我想知道有喜歡
with sometable(@param1) as
(
select *
from callTableFunction(@param)
.....< a whole load of other joins, wheres , etc >........
)
select
sometable(@paramPrev) prevValues
full join sometable(@currPrev) currValues on prevValues.Field1 = currValues.Field1
where ........
group by ....
使用CTE 另一種方法是有這樣或技術,我可以使用任何這樣的語法。
這是在SQL Server 2008 R2中
謝謝。
這是我首先,但它沒有解決任何問題。它只是將子選擇符移動到CTE部分,我仍然重複了代碼。我想要做的是使用普通子查詢(使用表函數調用)來減少整個查詢,所以如果我想對子查詢中的邏輯進行更改,我可以在一個地方完成。我現在可以想到的最好的方法是將其封裝在一個函數中,但我不喜歡這種方法。 – ManiP