[SQL SERVER][TSQL]資料表值函數(1)
前幾天朋友問我檢視表(View)是否可以帶參數,可想而知當然是不行的,
因為檢視表主要就是簡化資料操作,
意指可以將複雜或常用連結定義為檢視表(如報表查詢),
讓使用者可以專注在特定的資料上。雖說如此,
但我們還是可以透過資料表值函數來作為檢視表帶參數的替代方式。
下面我舉各簡單例子,來看看兩者上作法差異(結果相同)
--使用檢視表(無法帶參數)
create view uvwGetApLog
as
select ApLogId,LogDate,LogMessage
from dbo.AP_LOG
--查詢(如果條件很多或語法複雜,
--這時就失去原本使用檢視表美意)
select * from uvwGetApLog
where LogDate between '20110101' and '20110201'
--資料表值函數中只單一陳述句(等同檢視表)
--不過比原有檢視表多了帶參數功能
create function ufnGetApLog(@sdate datetime,@edate datetime)
returns table
as return
(
select ApLogId,LogDate,LogMessage
from dbo.AP_LOG
where LogDate between @sdate and @edate
)
--查詢(語法看起來就簡潔乾淨多了)
select * from ufnGetApLog('20110101','20110201')
兩者執行計畫成本皆相同
參考