SQL里面不带参数的存储过程与视图的区别
1、存储过程是程序化的sql可以实现一般sql不能实现的功能。
如:先检索一个表得到一些数据,经过一定的编辑后更新到另外一个表中、这就可以用不带参数的存储过程实现。
2、视图是虚拟表,不存储数据,存储的是sql,检索他的时候实际上是执行定义它的sql语句。
说明:从你的问题上可以看出,你使用存储过程仅仅是用它检索数据,所以你会产生这样的疑问,一定要记住,存储过程理解的简单一点就是“数据库中的程序”,
可以在不需要外部程序(如C,java,vb等)的情况下,让数据库自己解决复杂的、用一般sql不能实现的功能,而视图则不然。
视图和存储过程比是没什么意义的
视图就是虚拟表,把视图和表比较还有点意思
视图不占实际空间,可以对任意的表进行叠加和剪裁,利用分区视图的功能,能加快表的I/O读取时间(需要2块以上硬盘)
视图只不过是存储在sql server上的select语句罢了,当对视图请求时,sql server会像执行一句普通的select语句那样的执行视图的select语句,它的性能并不像人们想象得那么出色。
而存储过程在编译后可以生成执行计划,这使得每次执行存储过程的时候效率将会更高,这是存储过程,另外提交参数的时候,使用存储过程将会减少网络带宽流量,这是存储过程相对于普通的sql语句在性能上的最大的优势。
视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是 SELECT 语句。SELECT 语句的结果集构成视图所返回的虚拟表。用户可以用引用表时所使用的方法,在 Transact-SQL 语句中通过引用视图名称来使用虚拟表。使用视图可以实现下列任一或所有功能:
将用户限定在表中的特定行上。
例如,只允许雇员看见工作跟踪表内记录其工作的行。
将用户限定在特定列上。
例如,对于那些不负责处理工资单的雇员,只允许他们看见雇员表中的姓名列、办公室列、工作电话列和部门列,而不能看见任何包含工资信息或个人信息的列。
将多个表中的列联接起来,使它们看起来象一个表。
聚合信息而非提供详细信息。
例如,显示一个列的和,或列的最大值和最小值。
------------------
数据库中的索引与书籍中的索引类似。在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。
------------------
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL
语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、
有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
可以在单个存储过程中执行一系列 SQL 语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。