sql server 視圖中定義參數

來源:互聯網
上載者:User

內嵌使用者定義函數
內嵌使用者定義函數是返回 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 篩選出使用者的某個商店特有的彙總資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.