2010-09-22 73 views
57

我已经使用了两者,但我不清楚的是当我更喜欢一个在另一个。我的意思是我知道存储过程可以采用参数...但我们真的可以仍然使用视图执行相同的事情吗?存储过程比。查看

因此,考虑性能和其他方面的时间和为什么我应该比另一方更喜欢?

+7

您应考虑包含用户定义的功能。 – 2010-09-22 20:27:09

+0

似乎这是一个重复:[保留SQL与存储过程与代码有什么优点和缺点](http://stackoverflow.com/questions/15142/what-are-the-pros-and-cons-to -keeping-sql-in-stored-procs-versus-code),这也是一个社区Wiki。 – Hibou57 2013-08-18 10:23:42

回答

34

那么,我会使用存储过程更好地封装代码和控制权限。

视图并不是真正的封装:它是一个扩展的宏。如果你很快就开始加入视图,你会有一些可怕的查询。是的,他们可以加入,但他们不应该..

说,视图是一个工具,有他们的地方(例如索引视图)像存储过程。

+0

这个答案对我来说非常重要。但我想知道,如何运行视图,因为我知道如何运行存储过程作为exec spName.please指导我。 – Freelancer 2013-05-09 10:14:02

+1

@Freelancer:'SELECT * FROM View',就像表格 – gbn 2013-05-09 10:15:17

18

视图的优点是它们可以像表格一样对待。您可以使用WHERE从它们获取过滤的数据,加入它们等等。如果足够简单,你甚至可以将数据插入到它们中。与存储过程不同,视图还允许您为结果编制索引。

+4

加入是*不是一个很好的理由。 – gbn 2010-09-22 20:23:48

+2

@gbn:为什么不...? – 2010-09-22 20:24:47

+3

查看我的回答...?心态是“我们可以为我们提供所有这些东西”,然后查看连接视图连接视图=对基表的可怕查询。看到它,之前修好几次。并回答了这个问题http://stackoverflow.com/search?q=user%3A27535+macro%2Bview – gbn 2010-09-22 20:29:47

11

存储过程的主要优点是它们允许您合并逻辑(脚本)。这个逻辑可以像IF/ELSE一样简单,或者更复杂,比如DO WHILE循环,SWITCH/CASE。

3

如果某个表的组合或您希望查询的数据的子集(例如,用其权限加入的用户),则视图很有用。事实上,意见应视为表格。

存储过程是“编译”的SQL代码片断,因为它在哪里运行比随机的其他查询更优化。存储过程中的sql代码的执行计划已经生成,因此执行运行比普通的sql语句稍微平滑。

4

我将存储过程的使用与数据库中发送/接收事务的需求相关联。也就是说,无论何时我需要将数据发送到我的数据库,我都使用存储过程。当我想要更新数据或查询数据库以获取在我的应用程序中使用的信息时也是如此。

当您希望提供给定表格中字段的子集时,数据库视图非常适用,使您的MS Access用户能够查看数据而无需修改数据,并确保您的报告能够生成预防性结果。

+4

首先,你不应该有MS Access用户。其次,正确的安全和权限应该防止他们修改数据。没意见。 – CaffGeek 2010-09-22 20:29:08

11

查看就像一个保存的查询语句,它不能包含复杂的逻辑或多个语句(超出使用union等)。对于任何复杂或可通过参数定制的选项,您都可以选择允许更大灵活性的存储过程。

在数据库体系结构中使用视图和存储过程的组合很常见,也许出于非常不同的原因。有时候是为了在架构重新设计时实现向后兼容性,有时为了使数据更易于操纵,与原本存储在表中的方式(非非视图化视图)相比。

大量使用Views可能会降低性能,因为SQL Server更难以优化这些查询。但是,可以使用索引视图,这些索引视图可以像索引表一样使用联接来提高性能。在实现索引视图时允许使用的语法有很多更严格的限制,并且根据SQL Server的版本实际使它们工作时有很多细微之处。

认为视图比存储过程更像表。

0

两个基本原理。

如果不希望插入成为可能,请使用存储过程而不是视图。在视图中插入可能不会给出它看起来要做的事情。它将在表中插入一行,该行可能与视图中的查询不匹配,然后该行将不会出现在视图中;插入某处,但不是在声明看起来的地方。

如果你不能从另一个存储过程中使用存储过程的结果(我从来没有能够使后者工作,至少在MySQL中)使用视图。

21

存储过程:的存储过程是提高 数据库客户端/服务器应用程序的安全,效率和可用性预编译的数据库查询。开发人员根据输入和输出变量指定存储的 过程。然后,他们编译数据库平台上的代码并将其提供给开发人员以供在其他环境(例如Web应用程序)中使用的应用程序 。 所有主要的数据库平台,包括Oracle,SQL Server和MySQL都支持存储过程。该技术的主要优势在于预编译执行效率显着提高,客户端/服务器流量减少, 代码重用和抽象的开发效率提高,以及 固有的安全控制授予用户对特定存储过程的权限,而不是 底层数据库表。

查看:数据库视图允许您创建在访问时即时生成的“虚拟表”。视图作为SQL语句存储在数据库服务器的 上,该语句从一个或多个表中抽取数据并(可选)对该数据执行转换。 用户可以像查询真实数据库 表一样查询视图。通常使用视图来缓解安全问题 为用户提供对数据库表 的某个视图的访问权限,而无需访问基础表本身。

enter image description here

+0

'删除查询'是什么意思? – 2017-05-04 20:04:09

+0

谢谢。哪些书是引号和表格? – Tim 2017-11-11 19:33:26

+0

@ Z.I.J你引用了一些内容,但你没有提到它的来源 – 2017-11-28 08:15:48

3

存储过程:存储过程是提高了安全性,效率和数据库客户端/服务器应用程序的可用性预编译的数据库查询。开发人员根据输入和输出变量指定存储过程。然后,他们在数据库平台上编译代码,并将其提供给应用程序开发人员用于其他环境(如Web应用程序)中。所有主要的数据库平台,包括Oracle,SQL Server和MySQL都支持存储过程。该技术的主要优势在于预编译执行带来的显着性能提升,客户端/服务器流量的减少,代码重用和抽象的开发效率提升以及赋予用户对特定存储过程而不是基础数据库表的权限。

视图:数据库视图允许您创建在访问时即时生成的“虚拟表”。视图作为SQL语句存储在数据库服务器上,该语句从一个或多个表中提取数据,并(可选)对该数据执行转换。用户可以像查看真实的数据库表一样查询视图。通常使用视图来缓解安全问题,方法是向用户提供对数据库表的某个视图的访问权限,而无需访问基础表本身。