我有一個複雜的SQL查詢,需要進一步過濾。 WHERE子句中的部分看起來像這樣:如何獲取SQL函數以返回WHERE子句中IN語句要使用的列表?
Where P.PeriodID in (36, 37)
我需要得到它看起來更像是這樣的:
Where P.PeriodID in dbo.GetPeriodsInRange(@startDate, @endDate)
函數必須返回到由IN語句中使用PeriodIDs列表。我真的很喜歡寫功能,所以我需要一些幫助。另外,我不確定如何處理邊緣案例,比如說在指定的日期範圍內沒有時段。
上面的函數不需要爲每一行進行評估。每行都是一樣的,所以可能會有一些優化可以完成,也許在執行查詢之前。
我很確定我在這裏打破了幾個「最佳實踐」,所以如果有更好的方法來做到這一點,請給我指出。但是,性能不是問題,所以我願意爲了簡單而犧牲性能。
我的問題適用於T-SQL(MS SQL服務器2000/2005)
如何:WHERE P.PeriodID IN(SELECT ID FROM dbo.GetPeriodsInRange(@startDate,@EndDate)) – 2010-07-07 09:49:35