SQL存储过程

来源:互联网 发布:火星情报局收视率数据 编辑:程序博客网 时间:2024/06/04 18:12
这两天要去份工作,招聘单位要求SQL存储过程,触发器要熟练,自已多年没有用过了,现在总结一下存储过程
--------------------------------------------
存储过程
是存储在服务器上的一组预编译的Transact-SQL语句。
系统存储过程是系统提供的存储过程,可以作为命令进行各种操作。另外,系统存储过程可以做为样本存储过程,指导用户如何编写有效的存储过程。
系统存储过程在master数据库中,其前缀为sp_
本地存储过程:用户自已在数据库中存储过程。
临时存储过程:也是用户自已在数据库中存储过程,前面加一个符号“#”(局部临时存储过程),加两个符号“##”
(全局临时存储过程)
远程存储过程:不在本机上的存储过程。
扩展存储过程:在SQL环境之外执行动态链接库DLL称为扩展存储过程,其前缀是xp_。

-----------------------------------------------------------------------

存储过程名称存储在当前数据库的系统表sysobjects中,将存储过程的文本存储在当前数据库的系统表syscomments中,存储过程的参数信息存储在系统表syscolumns中.
常用的系统存储过程:
sp_help:显示参数清单和其数据类型
sp_helptext:显示存储过程的定义文本
sp_depends:列出存储过程依据的对象或依据存储过程的对象
sp_stored_procedures:返回当前数据库中的存储过程的清单。
---------------------------------------------------------------------
创建存储过程

1、简单存储过程

create procedure 存储过程名称
as
sql语句块
go

2、输入参数存储过程(定义参数时,最好赋默认值,默认值为NULL或常量)

create procedure 存储过程名称
@参数1 类型=值|NULL,
@参数2 类型=值|NULL
as
sql语句块
go

3、输出参数存储过程

create procedure 存储过程名称
@参数1 类型,
@参数2 类型,
@参数3 类型 OUTPUT
as
sql语句块
go
--------------------------------------------------
执行存储过程
1、execute 存储过程名称
2、execute 存储过程名称
@参数1=值1,
@参数2=值2
go

execute 存储过程名称
值1,值2
go
3、declare @参数3 类型
   execute 存储过程名称 值1,值2,@参数3 OUTPUT
删除存储过程
drop 存储过程名称
----------------------------------------------------------------------
下面分别列出不同情况的例子
1、不带参数储过程
例:CREATE PROC kk
    AS
    SELECT name,id,sex
    FROM   students
    WHERE  calss='初三'
    GO
   EXECUTE kk
   GO
2、带输入参数存储过程
例:CREATE PROC qurey
    @a1 char(4)=NULL
    AS
    SELECT name,id,sex
    FROM   students
    WHERE  calss=@a1
    GO
    EXECUTE PROC qurey
    @a1='初三'
    GO
或者
    EXECUTE PROC qurey '初三'
    GO
3、带输出参数存储过程
例:CREATE PROC sum
    @a1 smallint,
    @a2 smallint,
    @a3 smallint OUTPUT
    AS
    @a3=@a1+@a2
    GO
    DECLARE @a4 smallint    
    EXECUTE sum 8,12,@a4 OUTPUT
    SET 'This is:', @a4
综合示例:
  USE mcedu
  IF EXEISTS(SELECT name FROM sysobject WHERE name='kk' AND type='p')
  DROP PROCEDURE kk
  GO
  CREATE PROCEDURE kk
  @a1 smallint,
  @a2 smallint,
  @a3 smallint OUTPUT
  AS
  SET @a3=@a1*@a2
  GO
   DECLARE @a4 smallint
   EXECUTE kk 2,3,@a4 OUTPUT
   SET 'ss',@a4
   GO