存储过程

Posted ftyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程相关的知识,希望对你有一定的参考价值。

存储过程(stored procedure)类似于C语言中的函数

用来执行管理任务或应用复杂的业务规则

存储过程可以带参数,也可以返回结果

视图封装的是select语句

存储过程封装的是tsql语句

 

常用的系统存储过程
系统存储过程 说明
sp_databases 列出服务器上的所有数据库
sp_helpdb 报告有关指定数据库或所有数据库的信息
sp_renamedb 更爱数据库的名称
sp_tables 返回当前环境下可查询的对象的列表
sp_columns 返回某个表的列的信息
sp_help 查看某个表的所有信息
sp_helpconstraint 查看某个表的约束
sp_helpindex 查看某个表的索引
sp_stored_procedures 列出当前环境中的所有存储过程
sp_password 添加或修改登陆账户的密码
sp_helptext 显示默认值、未加密的存储过程,用户定义的存储过程、触发器或视图的实际文本

调用存储过程

  execute sp_databases

  exec sp_databases

  sp_databases

 

常用的扩展存储过程:xp_cmdshell

调用语法:

exec xp_cmdshell dos命令, [no_output]

 1 --创建数据库blankDB,要求保存在d:ank下
 2 use master
 3 go
 4 exec xp_cmdshell mkdir d:and, no_output
 5 if exists(select * from sysdatabases
 6         where name=bankDB
 7     drop database bankDB
 8 go
 9 create database bankDB(
10 ...
11 )
12 go
13 exec xp_cmdshell dir d:ank --查看文件

 

如何创建存储过程

定义存储过程的语法:

create proc[edure] 存储过程名
  @参数1 数据类型 = 默认值 output,
  ...,
  @参数n 数据类型 = 默认值 output
  as
  sql 语句
go

和C语言的函数一样,参数可选

参数分为输入参数、输出参数

输入参数允许有默认值

 

输入参数:用于向存储过程转入值,类似C语言的按值传递;

输出参数:用于在调用存储过程后,返回结果,类似C语言的按引用传递。

 

带输出参数的存储过程:

如果希望调用存储过程后,返回一个或多个值,这时就需要使用输出(output)参数了

相当于c#语言中的ref/out引用传递

 

使用raiserror定义错误信息

raiserror(msg_id | msg_str, severity, state With option[,...n]])

一般我们只定义msg_str,severity,state就可以了

msg_id:在sysmessages系统表中指定用户定义错误信息

msg_str:用户定义的信息,最大255个字符

severity:定义错误级别,用户可使用的级别 0 - 18 级,一般16

state:表示错误的状态,1 - 127之间,一般1

option:指示是否将错误记录到服务器错误日志中

问题:

当用户调用存储过程时,传入的及格线参数不在 0 - 100 之间时,将弹出错误警告,终止存储过程的执行

 1 create proc proc_stu
 2     @notPassCount int output, --输出参数
 3     @writtenPass int = 60,   --默认参数
 4     @labPass int = 60
 5     AS
 6         if(not @writtenPass Between 0 and 100)
 7             or (not @labPass between 0 and 100)
 8         begin
 9             raiserror(及格线错误,请指定 0 - 100 之间的分数,统计中断推出。,16,1)
10             return  --立即终止
11         end
12     ...其他tsql语句,略
13 go

以上是关于存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Java调用SQL Server的存储过程详解(转)

如何将 r ggplot 图存储为 html 代码片段

sql 这些代码片段将演示如何逐步使用PolyBase。你应该有一个blob存储和存储秘密方便

从Oracle存储过程Oracle 11g发送邮件

mybatis 存储过程

Sublime Text自定制代码片段(Code Snippets)