首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们可以在SQL中将参数传递给视图吗?

我们可以在SQL中将参数传递给视图吗?
EN

Stack Overflow用户
提问于 2009-11-06 20:30:56
回答 19查看 386.7K关注 0票数 154

是否可以将参数传递给Microsoft SQL Server中的视图?

我试着用下面的方法create view,但它不起作用:

代码语言:javascript
运行
复制
create or replace view v_emp(eno number) as select * from emp where emp_id=&eno;
EN

回答 19

Stack Overflow用户

发布于 2009-11-06 21:14:34

如前所述,您不能这样做。

一种可能的解决方案是实现一个存储函数,例如:

代码语言:javascript
运行
复制
CREATE FUNCTION v_emp (@pintEno INT)
RETURNS TABLE
AS
RETURN
   SELECT * FROM emp WHERE emp_id=@pintEno;

这使您可以将其用作普通视图,包括:

代码语言:javascript
运行
复制
SELECT * FROM v_emp(10)
票数 148
EN

Stack Overflow用户

发布于 2009-11-06 21:10:06

有两种方法可以实现你想要的。不幸的是,这两种方法都不能使用视图来完成。

您可以创建一个表值用户定义函数,该函数接受所需的参数并返回查询结果

或者,您可以做几乎相同的事情,但创建一个存储过程,而不是用户定义的函数。

例如:

存储过程将如下所示

代码语言:javascript
运行
复制
CREATE PROCEDURE s_emp
(
    @enoNumber INT
) 
AS 
SELECT
    * 
FROM
    emp 
WHERE 
    emp_id=@enoNumber

否则,用户定义的函数将如下所示

代码语言:javascript
运行
复制
CREATE FUNCTION u_emp
(   
    @enoNumber INT
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT    
        * 
    FROM    
        emp 
    WHERE     
        emp_id=@enoNumber
)
票数 39
EN

Stack Overflow用户

发布于 2009-11-06 21:03:02

不,你不能,就像Mladen Prajdic说的那样。将视图看作是表或表的组合上的“静态过滤器”。例如:视图可以组合表OrderCustomer,因此您可以从Order获得一个新的“表”,其中包含行以及包含客户名称和客户编号的新列(表的组合)。或者,您可以创建一个仅从Order表中选择未处理订单的视图(静态筛选器)。

然后,您可以像从任何其他“普通”表中选择一样从视图中进行选择-所有“非静态”过滤都必须在视图之外进行(比如“获取名为Miller的客户的所有订单”或“获取12月24日收到的未处理订单”)。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1687279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档