diff --git "a/34\351\231\210\346\264\213/\347\254\224\350\256\260/0926\345\202\250\345\255\230\350\277\207\347\250\213.md" "b/34\351\231\210\346\264\213/\347\254\224\350\256\260/0926\345\202\250\345\255\230\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..08a9d5e14710a55770b1b946f16ae4e66c36a778 --- /dev/null +++ "b/34\351\231\210\346\264\213/\347\254\224\350\256\260/0926\345\202\250\345\255\230\350\277\207\347\250\213.md" @@ -0,0 +1,133 @@ +**一 什么是储存过程** + +存储过程指的是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它,也可以从另一个过程或触发器调用。 + +存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。 + +**二 储存过程的分类** + +根据返回值类型的不同,我们可以将存储过程分为三类:**返回记录集的存储过程**,**返回数值的存储过程**(也可以称为标量存储过程),以及**行为存储过程**。 + +1、返回记录集的存储过程:它的执行结果是一个记录集,典型的例子是从数据库中检索出符合某一个或几个条件的记录; + +2、返回数值的存储过程:执行完以后返回一个值,例如在数据库中执行一个有返回值的函数或命令; + +3、行为存储过程:仅仅是用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。 + +**三** **常见的系统存储过程有** + +```sql +sp_databases 列出服务上的所有数据库 +sp_helpdb --报告有关指定数据库或所有数据库的信息 +sp_renamedb 更改数据库的名称 +sp_tables --返回当前环境下可查询的对象的列表 +sp_columns 返回某个表列的信息 +sp_help --返回某个表的所有信息 +sp_helpconstraint 查看某个表的约束 +sp_helpindex --查看某个表的索引 +sp_stored_procedures 列出当前环境中的所有存储过程 +sp_password --添加或修改登录账户的密码 +sp_rename 重命名存储过程 +sp_helptext 显示默认值,未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。 +``` + + **四 创建的过程是怎么样的** + +(1)没有输入参数,没有输出参数的储存过程。 + +```sql +create proc <存储过程名称> +as + +go +``` + +(2)由输入参数,没有输出参数的储存过程 + +```sql +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +go +``` + +(3)有输入参数,没有输出参数,但是 有返回值的存储过程(返回值必须整数) + +```sql +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +return 整数 +go +``` + +(4)4.有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 + +```sql +create proc <存储过程名称> +<变量1> <数据类型> output +<变量2> <数据类型> output +... +as + +return 整数 +go +``` + +**五 执行存储过程** + +```sql +--无参 +exec <存储过程名称> +--带参 +exec <存储过程名称> <形参1>,<形参2>,... +--带参带返回值 +declare @变量 +exec @变量 = <存储过程名称> <形参1>,<形参2>,... +--有输入参数,有输出参数的存储过程 +declare @变量 +exec <存储过程名称> <形参1>,<形参2>,@变量 output +--一个变量同时具备输入输出功能 +declare @变量 <数据类型> = 值 +exec <存储过程名称> <形参1>,<形参2>,@变量 output +``` + +**六 删除存储过程** + +```sql +drop procedure <存储过程名称> +``` + + + +#### 七 存储过程的优点 + +允许模块化程序设计 + +执行速度更快 + +减少网络流通量 + +提高系统安全性 + + + +#### 八 存储过程与函数的区别 + +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +3.储存过程可以输入输出参数,而函数只可以输入参数。 + +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 + +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 + +6.函数可以作为条件在语句中使用,但是存储过程不可以。 \ No newline at end of file