sql server 視圖中定義參數


內嵌用戶定義函數
內嵌用戶定義函數是返回 table 的用戶定義函數的子集。內嵌函數可用於實現參數化視圖的功能。

請看下面的視圖:

CREATE VIEW vw_CustomerNamesInWA AS
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = 'WA'

可創建更通用的版本 vw_CustomerNamesInRegion,方法是將 WHERE Region = 'WA' 替換為 WHERE Region = @RegionParameter 並讓用戶指定感興趣的查看區域。然而,視圖不支持在 WHERE 子句中指定的搜索條件的參數。

內嵌用戶定義函數可用於支持在 WHERE 子句中指定的搜索條件的參數。下面是使用戶得以在其選擇中指定區域的函數示例:

CREATE FUNCTION fn_CustomerNamesInRegion
( @RegionParameter nvarchar(30) )
RETURNS table
AS
RETURN (
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = @RegionParameter
)
GO
-- Example of calling the function for a specific region
SELECT *
FROM fn_CustomerNamesInRegion(N'WA')
GO

內嵌用戶定義函數遵從以下規則:

RETURNS 子句僅包含關鍵字 table。不必定義返回變量的格式,因為它由 RETURN 子句中的 SELECT 語句的結果集的格式設置。


function_body 不由 BEGIN 和 END 分隔。


RETURN 子句在括號中包含單個 SELECT 語句。SELECT 語句的結果集構成函數所返回的表。內嵌函數中使用的 SELECT 語句受到與視圖中使用的 SELECT 語句相同的限制。
內嵌函數還可用於提高索引視圖的能力。索引視圖自身不能在其 WHERE 子句搜索條件中使用參數,針對特定用戶的需要調整存儲的結果集。然而,可定義存儲與視圖匹配的完整數據集的索引視圖,然后在包含允許用戶調整其結果的參數化搜索條件的索引視圖上定義內嵌函數。如果視圖定義較復雜,則生成結果集所要執行的大多數工作都涉及在視圖上創建聚集索引時生成聚合或聯接多個表。之后如果創建引用視圖的內嵌函數,則該函數可應用用戶的參數化篩選,從結果集中提取由 CREATE INDEX 語句生成的特定行。在執行 CREATE INDEX 時復雜的聚合和聯接進行一次,隨后引用內嵌函數的所有查詢都從簡化的存儲結果集中篩選行。例如:

定義將所有銷售數據聚合到結果集的視圖 vw_QuarterlySales,該結果集按季度報告所有商店的匯總銷售數據。


在 vw_QuarterlySales 上創建聚集索引以具體化包含匯總數據的結果集。


創建篩選匯總數據的內嵌函數:
CREATE FUNCTION fn_QuarterlySalesByStore
(
@StoreID int
)
RETURNS table
AS
RETURN (
SELECT *
FROM SalesDB.dbo.vw_QuarterlySales
WHERE StoreID = @StoreID
)

然后用戶可從內嵌函數進行選擇以獲得其特定商店的數據:
SELECT *
FROM fn_QuarterlySalesByStore( 14432 )

滿足在第 4 步發出的查詢所需的大多數工作將按季度聚合銷售數據。該工作在第 2 步進行一次。第 4 步中的每個 SELECT 語句都使用函數 fn_QuarterlySalesByStore 篩選出用戶的某個商店特有的聚合數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM