View
可以被當作是虛擬資料表。它跟資料表的不同是,資料表中有實際儲存資料,而View是建立在資料表之上的一個架構,它本身並不實際儲存資料。
簡單來說,View就是把你想抓的資料事先篩選出來。
例如:一段複雜的語法,需JOIN三個或以上,資料來源加起來超過十幾萬筆,
這時候就可以建議使用View的方式,事先過濾掉要排除的資料。
假設VIEW是V_Order_Detail,那語法如下
select * from V_Order_Detail 即可。
View的使用時機就我自己感想如下:
1.查詢資料來源數據量太龐大(建議也要搭配index)。
2.查詢語法太過複雜,有時候需要JOIN四五個以上的資料表,語法往往過於複雜。
3.方便維護,有時候不想將一大段語法寫在程式裡面,且也不需要因改動語法就調整程式,
這時候把語法寫成VIEW,就算要調整只需調VIEW就好。
建立VIEW的方式同樣有兩種,透過介面設定和下指令的方式,這部分就不需多說明。
FUNCTION
建立方式如同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';
大致上先說明到這邊。
可以被當作是虛擬資料表。它跟資料表的不同是,資料表中有實際儲存資料,而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';
大致上先說明到這邊。
留言
張貼留言