将参数传递给 SQL 视图
Passing parameters to a SQL view
我有一个 SQL 视图,我想使用传递给它的参数对其进行过滤。我正在考虑创建一个存储过程,但是,经过一番研究,我得出的结论是这是不可能的。
其他类似线程建议创建一个存储函数或一个嵌入了视图代码的存储过程。我的问题是,执行此类任务的最有效方法是什么。我的视图由大约 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
您可以使用存储过程中的视图和基于参数的过滤器
CREATE PROCEDURE s_emp
(
@enoNumber INT
)
AS
BEGIN
SELECT *
FROM VIEW_NAME
WHERE COLUMN_NAME = @enoNumber
END
您可以创建一个 table 值函数,它的行为与参数化视图完全一样...
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;
我有一个 SQL 视图,我想使用传递给它的参数对其进行过滤。我正在考虑创建一个存储过程,但是,经过一番研究,我得出的结论是这是不可能的。
其他类似线程建议创建一个存储函数或一个嵌入了视图代码的存储过程。我的问题是,执行此类任务的最有效方法是什么。我的视图由大约 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
您可以使用存储过程中的视图和基于参数的过滤器
CREATE PROCEDURE s_emp
(
@enoNumber INT
)
AS
BEGIN
SELECT *
FROM VIEW_NAME
WHERE COLUMN_NAME = @enoNumber
END
您可以创建一个 table 值函数,它的行为与参数化视图完全一样...
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;