我有一个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
)
答案 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