[SQL SERVER][TSQL]資料表值函數(1)

[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')  

 

兩者執行計畫成本皆相同

image

 

 

 

參考

資料表值使用者定義函數

將預存程序重寫為函數