MS sql如何使用存储过程?

Posted

tags:

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

  一、存储过程的概念
  T-SQl和C语言一样 ,是一门结构化的语言。
  什么是存储过程?
  存储过程是SQL查询语句与控制流程语句的预编译集合,并以特定的名称保存在数据库中。存储过程也是数据库对象
  分类:
  系统存储过程: 以sp_或xp_打头
  用户自定义 :以proc_打头
  存储过程的优点:
  执行速度快 效率高
  模块式编程
  减少网络流量
  提高安全性
  二、系统存储过程
  SQl server 的系统存储过程保存在master数据库中,且所有命名的系统存储过程命名以“Sp_”开头。在master数据库中,
  系统存储过程数量如下:
  代码如下 复制代码
  select count([name])as \'系统存储数量\' from sysobjects
  where [name] like \'sp_%\'

  EXECUTE 用来表示调用存储过程,也可以缩写为EXEC,
  调用存储的语法如下:
  EXECUTE ‘存储过程名’ ‘参数’ ---如果没有参数则省略参数
  常用的系统存储过程
  EXEC sp_databases 列出当前系统中的数据库
  EXEC sp_renamedb \'Northwind\',\'Northwind1\' 修改数据库的名称(单用户访问)
  USE stuDB GO EXEC sp_tables 返回某个表列的信息
  EXEC sp_columns 查看指定列的信息
  EXEC sp_help 查看某个表的所有信息
  EXEC sp_helpconstraint \'表名\' 查看某个表的约束
  EXEC sp_helpdb \'数据库名\' 或 EXEC sp_helpdb 查看指定数据库或所有数据库信息
  EXEC sp_helptext \'对象名称\' 显示数据库对象(存储过程、触发器、试图)的定义文本
  EXEC sp_helpindex \'表名\' 查看指定表的索引信息
  EXEC sp_renamedb \'原名称\',\'新名称\' 更改数据库名称
  EXEC sp_stored_procedures 列出当前环境可用的所有存储过程

  除了系统存储过程,SQL Server 还提供以Xp_开头的扩展存储过程,如可以调用DOS命名的,XP_cmdshell 存储过程
  用法如下:
  
  代码如下 复制代码

  EXEC Xp_cmdshell DOS 命名 [NO_OUTPUT]
  

  NO_OUTPUT 为可选参数,表示是否输入存储过程返回的信息
  三、用户自定义存储过程
  1、语法
  代码如下 复制代码
  create procedure 存储过程名
  @参数1名 数据类型 [=默认值] [参数类型(输入/输出)]
  ... ...
  @参数n名 数据类型 [=默认值] [参数类型(输入/输出)]
  as
  begin
  sql语句
  end;
  go
  
  参数类型分为输入参数和输出参数,默认为输入参数,使用OUTPUT表示输出参数。创建存储过程最好以proc开头
  
  2、创建不带参数的存储过程
  
  代码如下 复制代码
  --判断存储过程是否存在
  if object_id(\'proc_student\',\'procedure\') is not null
  drop procedure proc_student
  go
  create procedure proc_student
  as
  begin
  select pcid as \'电脑编号\',
  case pcuse
  when 0 then \'空闲\'
  when 1 then \'忙碌\'
  end as \'使用状态\' from pc
  end;
  --调用存储过程
  execute proc_student select * from pc
  go
  
  3、创建带输入参数的存储过程
  语法:
  代码如下 复制代码
  create procedure 存储过程名
  @参数1名 数据类型 [=默认值]
  ....
  @参数2名 数据类型[=默认值]
  as
  SQl与语句
  ...
  go
  
  --例如
  --创建带输入参数的存储过程
  代码如下 复制代码
  if object_id(\'proc_stu\',\'procedure\') is not null
  drop procedure proc_stu
  go
  create procedure proc_stu
  @pcuse int
  as
  begin
  select pcid as \'电脑编号\',
  case pcuse
  when 0 then \'空闲\'
  when 1 then \'忙碌\'
  end as \'使用状态\' from pc where pcuse=@pcuse end;
  --调用存储过程
  execute proc_stu @pcuse=1
  
  4、创建带输出参数的存储过程
  代码如下 复制代码
  --创建带输出参数的存储过程
  if OBJECT_ID(\'proc_s\',\'procedure\') is not null
  drop procedure proc_s
  go
  create procedure proc_s
  @pcid int,
  @pcus int output
  as
  begin
  select @pcus=pcuse from pc where pcid=@pcid end;
  --调用存储过程
  declare @pcus int execute proc_s 5,@pcus output
  

  四、处理错误信息
  当存储过程的语句十分复杂时,可以在存储过程中加入错误语言。SQL Server中可以使用RAISERROR 返回用户自定义的错误信息。
  RAISERROR 语法如下:
  
  RAISERROR (自定义的错误信息,错误的严重级别,错误状态)
  
  自定义错误信息:表示输出信息:表示输出的错误提示文本
  错误的严重级别:表示用户自定义错误的严重性级别。(0-18极)
  错误的状态:表示自定义错误的状态,值的范围在1-127
参考技术A 啥意思

exec test_sp 参数

是要这个?

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

如何删除 MS SQL Server 存储过程中的 While 循环? [关闭]

MS SQL Server - 如何将所有存储过程从我的机器导出到我的朋友机器?

带参数的ms sql server的扩展存储过程,怎么传递参数

没有为存储过程定义参数 @x... 使用 MS_SQL JDBC

ms sql存储过程返回数据不输出

MS SQL 分页存储过程