2017-08-01 129 views
1

我有一個SQL視圖,我想用傳遞給它的參數來過濾它。我正在考慮創建一個存儲過程,但經過一番研究後,我得出這樣的結論:這是不可能的。將參數傳遞給SQL視圖

其他類似的線程建議創建一個存儲的函數或存儲過程與視圖的代碼嵌入到它。我的問題是,執行此類任務的最有效方式是什麼。我的觀點由大約70行代碼組成,僅供參考。你怎麼看?以下是從另一個線程獲取的一些片段。

存儲過程看起來像

CREATE PROCEDURE s_emp 
(
    @enoNumber INT 
) 
AS 
SQL VIEW CODE + 
WHERE 
    [email protected]_parameter 

或者用戶定義的函數看起來像

CREATE FUNCTION u_emp 
( 
    @enoNumber INT 
) 
RETURNS TABLE 
AS 
RETURN 
(
    SQL VIEW CODE + 
    WHERE  
     [email protected]_parameter 
) 

Source Thread

+8

對待查看就像一個表。使用「存儲過程」從'Where'子句中的參數中查看'Select'。 –

+0

@WEI_DBA所以你從'存儲過程'執行'view'? –

+3

'Select * From View_Name'將您的視圖視爲表格。而已。添加一個'Where'子句,用參數等縮小選擇範圍。使用'Order by'排序。你用桌子做的每一件事,都是你的看法。 –

回答

1

您可以使用存儲過程和過濾器內部的觀點基於參數

CREATE PROCEDURE s_emp 
(
    @enoNumber INT 
) 
AS 
BEGIN 
    SELECT * 
    FROM VIEW_NAME 
    WHERE COLUMN_NAME = @enoNumber 
END 
+0

因此,您可以獨立創建視圖,然後使用存儲過程進一步過濾視圖並返回結果? –

+0

如果視圖僅用於存儲過程那麼爲什麼仍然創建視圖?只需將整個選擇存入存儲過程 – GuidoG

+0

也總是以「set nocount on」開始每個存儲過程 – GuidoG

0

您可以創建一個表值函數,它的行爲完全像一個參數化的視圖...

SELECT 
    mt.SomeColumn, 
    mt.ComeOtherColumn, 
    mtvf.FunctionColumn, 
    mtvf.AnotherFunctionColumn 
FROM 
    dbo.MyTable mt 
    JOIN dbo.MyTableValuedFunction('2017-07-01', '2017-08-01') mtvf 
     ON mt.SomeColumn = mtvf.SomeColumn;