VIEW、FUNCTION、stored procedure

View
可以被當作是虛擬資料表。它跟資料表的不同是,資料表中有實際儲存資料,而View是建立在資料表之上的一個架構,它本身並不實際儲存資料。
簡單來說,View就是把你想抓的資料事先篩選出來。

例如:一段複雜的語法,需JOIN三個或以上,資料來源加起來超過十幾萬筆,

這時候就可以建議使用View的方式,事先過濾掉要排除的資料。

假設VIEW是V_Order_Detail,那語法如下

select * from V_Order_Detail 即可。


View的使用時機就我自己感想如下:
1.查詢資料來源數據量太龐大(建議也要搭配index)。
2.查詢語法太過複雜,有時候需要JOIN四五個以上的資料表,語法往往過於複雜。
3.方便維護,有時候不想將一大段語法寫在程式裡面,且也不需要因改動語法就調整程式,
   這時候把語法寫成VIEW,就算要調整只需調VIEW就好。

建立VIEW的方式同樣有兩種,透過介面設定和下指令的方式,這部分就不需多說明。



FUNCTION
或稱為使用者定義函數,跟預儲程序很像,不過最後會傳回值。呼叫方式不是 call,而是Select,例如:『select 預儲函數名稱(引數值);』或『select 預儲函數名稱();』。

建立FUNCTION指令如下,

CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int) RETURNS int AS BEGIN DECLARE @ret int; SELECT @ret = SUM(p.Quantity) FROM Production.ProductInventory p WHERE p.ProductID = @ProductID AND p.LocationID = '6'; IF (@ret IS NULL) SET @ret = 0; RETURN @ret; END; GO

使用方式
select dbo.ufnGetInventoryStock('3')




stored procedure

把一連串的SQL程序步驟儲存起來,最後透過 『call 預儲程序名稱;』來呼叫。

可單純執行語法;也可回傳字串或資料集。


建立方式如同FUNCTION

CREATE PROCEDURE HumanResources.uspGetEmployeesTest2 @LastName nvarchar(50), @FirstName nvarchar(50) AS SET NOCOUNT ON; SELECT FirstName, LastName, Department FROM HumanResources.vEmployeeDepartmentHistory WHERE FirstName = @FirstName AND LastName = @LastName AND EndDate IS NULL; GO

使用方式
EXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';


大致上先說明到這邊。

留言