diff --git "a/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.26-\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.26-\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..de3c5f3d0769e333cee0569850ba6d63c22a8590 --- /dev/null +++ "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.26-\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,112 @@ +## 存储过程(Stored Procedure) + +### 常用的系统存储过程 + +```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 +go +create proc 存储过程名 +as +sql语句 +go +``` + +#### 2.有参 + +```sql +go +create proc 存储过程名 +变量1 数据类型, +变量2 数据类型, +... +as +sql语句 +go +``` + +#### 3.有参,但是没有输出参数,有返回值(只能是整数) + +```sql +go +create proc 存储过程名 +变量1 数据类型, +变量2 数据类型, +... +as +sql语句 +return 整数 +go +``` + +#### 4.有参,有输出参数,变量具备同时输入输出参数 + +```sql +go +create proc 存储过程名 +变量1 数据类型 output, +变量2 数据类型 output, +... +as +sql语句 +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. 提高系统安全性 + +### 存储过程与函数的区别 + +#### 1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +#### 2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +#### 3.储存过程可以输入输出参数,而函数只可以输入参数。 + +#### 4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 \ No newline at end of file