为什么要使用存储过程执行INSERT,UPDATE和DELETE操作?

jl6*_*jl6 1 sql-server stored-procedures dml

该问题的答案表明:“但是,理想情况下,您不允许对表使用临时DML,而通过存储过程来控制所有DML。”

为什么这样理想?与将SELECT,UPDATE,INSERT,DELETE授予用户需要操纵的表相比,这解决了什么问题?

Pan*_*vos 5

视图和存储过程就像一个API。它们使您可以隐藏实现,版本更改,提供安全性并防止不幸的客户端操作,例如“从公司成立以来从所有发票中获取所有字段”。

视图和存储过程允许DBA修改架构以满足性能要求,而不会破坏应用程序。数据可能需要水平或垂直分区,跨文件拆分,可能必须添加或删除字段等。如果没有存储过程,这些更改将需要对应用程序进行大量更改。

通过控制每个应用程序使用的存储过程和视图,您可以提供模式更改的版本控制-每个应用程序将看到其期望的数据库API。

还可以在特定的存储过程上分配权限,从而允许您限制用户可以执行的操作,而无需授予他们对表的完全访问权限。例如,您可以允许常规员工仅更改他们在员工表上的联系方式,但允许HR进行更大幅度的更改。

此外,您可以将复杂的数据密集型操作封装在一个可测试的过程中,而不用在客户端源代码中管理原始SQL语句字符串。

使用SQL Server Profiler或动态管理视图还可以更轻松地跟踪存储过程的执行。这使DBA可以找到可能导致性能下降的热点和元凶。