为什么在何时何地使用存储过程,视图和函数?

时间:2019-02-19 05:09:23

标签: sql-server

我经常使用存储过程来访问数据,但不知道哪一个最好-视图还是存储过程或函数?

请告诉我以上哪种方法最适合数据访问,为什么最好,请在示例中列出原因。

我在Google上进行了搜索,以了解哪个最好,但没有得到预期的答案

5 个答案:

答案 0 :(得分:3)

查看

视图是由“ SELECT”语句组成的“虚拟”表,通过“虚拟”

我的意思是视图没有存储任何物理数据-只有视图的定义存储在数据库内部;除非您通过在其上放置索引来实现视图。

  1. 根据定义,您不能将参数传递给视图
  2. 视图内部不允许DML操作(例如INSERTUPDATEDELETE);仅SELECT条语句。

大多数时候,视图封装了复杂的联接,因此它可以在查询或存储过程中重用。通过从基础表中隐藏敏感列,它还可以提供隔离和安全级别。

存储过程

存储过程是一组编译成单个执行计划的Transact-SQL语句,或者换句话说就是保存的Transact-SQL语句的集合。

存储过程:

  • 接受参数
  • 不能在较大的查询中用作构建块
  • 可以包含多个语句,循环,IF ELSE等。
  • 可以对一个或几个表进行修改
  • 不能用作INSERT,UPDATE或DELETE语句的目标

视图:

  • 不接受参数
  • 可以用作较大查询中的构建块
  • 只能包含一个SELECT查询
  • 无法对任何表进行修改
  • 但是(有时)可以用作INSERT,UPDATE或DELETE语句的目标。

功能

函数是由一个或多个Transact-SQL语句组成的子例程,可用于封装代码以供重用

有3种类型(标量,表值和内联变量表)UDF,它们各自具有不同的用途,您可以阅读有关BOL中的函数或UDF的更多信息

UDF有很大的局限性;根据定义,它不能更改数据库的状态。我的意思是,您无法在UDF(INSERT,UPDATE,DELETE)等内部执行数据操作操作。

答案 1 :(得分:0)

SP非常适合执行您无法使用函数执行的DDL语句。 SP和用户定义的函数接受参数并可以返回值,但是它们不能执行相同的语句。

用户定义的函数只能执行DML语句。

View不接受参数,仅接受DML语句。

答案 2 :(得分:0)

我会把它变得很短很直。

当您从不同的表访问数据并且不想传递参数时,请使用 View

要执行DML语句时,请使用功能

要执行DDL语句时,请选择存储过程

休息是在特定时间点将您的知识和想法打入您的脑海。

答案 3 :(得分:0)

我希望以下信息可以帮助您了解SQL过程,视图和函数的使用。

存储过程-存储过程可用于您提到的已经在使用的任何数据库操作,例如插入,更新,删除和提取。

视图-仅视图可用于获取数据,但由于无法将参数传递给视图而具有局限性。例如根据传递的参数过滤数据

函数-通常用于特定操作的函数,例如您具有许多内置的SQL Server函数,例如日期,数学,字符串操作等。

答案 4 :(得分:0)

出于性能原因,许多人会争论 -尽可能避免使用函数(尤其是标量)

调整存储过程(查询计划)和视图更容易

IMO,视图(和索引视图)只是更高级的选择 存储过程具有多种功能,您可以在其中进行转换/操作