将参数传递给SQL视图

时间:2017-08-01 12:32:30

标签: sql-server stored-procedures sql-function

我有一个SQL视图,我想使用传递给它的参数来过滤它。我正在考虑创建一个存储过程,然而,经过一些研究,我得出结论,这是不可能的。

其他类似的线程建议创建存储函数或嵌入View代码的存储过程。我的问题是,执行此类任务的最有效方法是什么。我的观点由大约70行代码组成,仅供记录。你怎么看?以下是从另一个帖子中获取的一些片段。

存储过程看起来像

CREATE PROCEDURE s_emp
(
    @enoNumber INT
) 
AS 
SQL VIEW CODE + 
WHERE 
    parameter=@stored_parameter

或者用户定义的函数看起来像

CREATE FUNCTION u_emp
(   
    @enoNumber INT
)
RETURNS TABLE 
AS
RETURN 
(
    SQL VIEW CODE + 
    WHERE     
        parameter=@stored_parameter
)

Source Thread

2 个答案:

答案 0 :(得分:3)

您可以创建一个表值函数,其行为与参数化视图完全相同...

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;

答案 1 :(得分:2)

您可以使用存储过程中的视图并根据参数

进行过滤
CREATE PROCEDURE s_emp
(
    @enoNumber INT
) 
AS 
BEGIN
   SELECT *
   FROM VIEW_NAME
   WHERE COLUMN_NAME =  @enoNumber
END