3 回答
TA贡献1842条经验 获得超21个赞
存储过程是可以以两种方式执行的一批SQL语句。大多数主要的DBM支持存储过程。但是,并非全部。您将需要与您的特定DBMS帮助文档一起验证具体信息。由于我最熟悉SQL Server,因此将其作为示例。
要创建存储过程,语法非常简单:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
因此,例如:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
存储过程的一个好处是,您可以将数据访问逻辑集中到一个位置,然后便于DBA优化。存储过程还具有安全优势,因为您可以授予存储过程执行权限,但用户不需要对基础表具有读/写权限。这是反对SQL注入的良好第一步。
存储过程确实有缺点,基本上是与基本CRUD操作相关的维护。假设每个表都有一个Insert,Update,Delete以及至少一个基于主键的选择,这意味着每个表将具有4个过程。现在,建立一个包含400个表的体面大小的数据库,您就有1600个过程!并假设您没有可能会重复的重复项。
在这里使用ORM或其他方法自动生成基本的CRUD操作有很多优点。
TA贡献1777条经验 获得超3个赞
存储过程是一组已创建并存储在数据库中的SQL语句。存储过程将接受输入参数,因此多个客户端可以使用不同的输入数据在网络上使用单个过程。存储过程将减少网络流量并提高性能。如果我们修改存储过程,则所有客户端都将获取更新的存储过程。
创建存储过程的样本
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
使用存储过程的优点
存储过程允许模块化编程。
您可以创建一次该过程,将其存储在数据库中,然后在程序中多次调用它。
存储过程可以加快执行速度。
如果该操作需要重复执行大量SQL代码,则存储过程可能会更快。首次执行时,将对它们进行解析和优化,并且存储过程的编译版本保留在内存缓存中以备后用。这意味着不需要每次使用都重新解析和优化存储过程,从而大大缩短了执行时间。
存储过程可以减少网络流量。
可以通过一条在过程中执行代码的语句来执行需要数百行Transact-SQL代码的操作,而不是通过网络发送数百行代码。
存储过程为您的数据提供更好的安全性
即使没有权限直接执行该过程的语句,也可以向用户授予执行存储过程的权限。
在SQL Server中,我们有不同类型的存储过程:
系统存储过程
用户定义的存储过程
扩展存储过程
系统存储的过程存储在master数据库中,这些过程以sp_前缀开头。这些过程可用于执行各种任务,以支持系统表中外部应用程序调用的SQL Server功能
示例:sp_helptext [StoredProcedure_Name]
用户定义的存储过程通常存储在用户数据库中,并且通常旨在完成用户数据库中的任务。尽管编码这些程序不使用的sp_前缀,因为如果我们使用的sp_第一个前缀,它会检查主数据库,然后它涉及到用户定义的数据库。
扩展存储过程是从DLL文件调用函数的过程。如今,不建议使用扩展存储过程,因为最好避免使用扩展存储过程。
添加回答
举报