我对以下几点感到困惑:

  1. 存储过程和视图之间有什么区别?

  2. 什么时候应该在SQL Server中使用存储过程,什么时候应该使用视图?

  3. 视图是否允许创建可以传递参数的动态查询?

  4. 哪一个是最快的,在什么基础上一个比另一个快?

  5. 视图或存储过程是否永久分配内存?

  6. 如果有人说视图创建虚拟表,而过程创建material 表,这意味着什么?

请让我知道更多的要点,如果有的话.

推荐答案

一个视图代表一张virtual的桌子.您可以在一个视图中连接多个表,并使用该视图显示数据,就像数据来自单个表一样.

存储过程使用参数执行函数...无论是更新和插入数据,还是返回单个值或数据集.

Creating Views and Stored Procedures-从微软获得了一些关于何时以及为什么使用每一个的信息.

假设我有两张桌子:

  • tbl_user,带列:user_iduser_nameuser_pw
  • tbl_profile,带列:profile_iduser_idprofile_description

所以,如果我发现自己经常从这些表格中查询...我将定义一个如下视图,而不是在每一段SQL中进行连接:

CREATE VIEW vw_user_profile
AS
  SELECT A.user_id, B.profile_description
  FROM tbl_user A LEFT JOIN tbl_profile B ON A.user_id = b.user_id
GO

因此,如果我想在将来查询profile_descriptionuser_id,我所要做的就是:

SELECT profile_description FROM vw_user_profile WHERE user_id = @ID

该代码可用于以下存储过程:

CREATE PROCEDURE dbo.getDesc
    @ID int
AS
BEGIN
    SELECT profile_description FROM vw_user_profile WHERE user_id = @ID
END
GO

所以,稍后,我可以打电话:

dbo.getDesc 25

我将得到user_id25的描述,其中25是你的参数.

显然还有很多细节,这只是基本的 idea .

Sql相关问答推荐

在SQL中对字符串进行逻辑排序,将数字部分排序为数字值

获取家谱树中第一次出现的特定信息,然后停止

如何以"% m—% d"格式对生日列表进行排序,以查找与今天最近的日期?

在Postgres中实现合并功能的干净方法,因为当目标/源不匹配时

如何在SQL Server中统计按备注分组的记录数

正在try 从SQL获取最新的ID和一个唯一名称

如何在presto中映射id与名称

在SQL中为两个日期之间的每个日期添加行

如何为该查询编写正确分区依据

多条件SQL排序行为

比较SQL中以逗号分隔的字符串

如何简化此PostgreSQL查询以计算平均值?

用VB.NET在Dapper中实现MS Access数据库顺序透视

在WHERE EXISTS子查询中,列返回是否重要?

从另一个没有公共键的表中获取值来加入

日期逻辑(查找过go 90 天内的第一个匹配行)

PostgreSQL-用第一个非空填充以前的值

将表格和字符串连接以 for each 记录生成订单项目

SQL 函数 DIFFERENCE 返回有趣的分数

使用in和and运算符过滤记录的条件