sql存储过程详解

1,不带参数的存储过程

2,带输入参数的存储过程

3,带输入和输出参数的存储过程

4,带返回值的存储过程

不带参数的存储过程

例如,以下存储过程返回Employees表中所有职员的记录。

存储过程代码:

USE TSQLFundamentals2008;
GO

IF OBJECT_ID('usp_ProcDemoNoParam','P') IS NOT NULL DROP PROC usp_ProcDemoNoParam;
GO
-- 1,不带参数
CREATE PROC usp_ProcDemoNoParam
AS
BEGIN
  SELECT * FROM HR.Employees;
END
GO

调用代码:

USE TSQLFundamentals2008;
GO

-- 1,不带参数存储过程的调用
EXEC usp_ProcDemoNoParam;

结果:

可以看到,共返回了9条记录。

带输入参数的存储过程

例如,该存储过程接受输入参数@empid,然后返回这个职员的信息。

创建存储过程代码:

IF OBJECT_ID('usp_ProcDemoWithInputParam','P') IS NOT NULL DROP PROC usp_ProcDemoWithInputParam;
GO
-- 2,带输入参数
CREATE PROC usp_ProcDemoWithInputParam
  @empid AS INT
AS
BEGIN
  SELECT * FROM HR.Employees
  WHERE empid= @empid;
END
GO

调用:

-- 2,带输入参数存储过程调用
EXEC usp_ProcDemoWithInputParam @empid=5;

结果:

带输入和输出参数的存储过程

例如,以下存储过程接受@empid即职员ID作为输入参数,然后返回该职员的信息,同时返回代码受影响行数作为输出参数。

创建存储过程代码:

IF OBJECT_ID('usp_ProcDemoWithInputOutputParam','P') IS NOT NULL DROP PROC usp_ProcDemoWithInputOutputParam;
GO
-- 3,带输入和输出参数
CREATE PROC usp_ProcDemoWithInputOutputParam
  @empid AS INT,
  @NumRowsAffected AS INT OUTPUT
AS
BEGIN
  SELECT * FROM HR.Employees
  WHERE empid= @empid;

  SET @NumRowsAffected= @@ROWCOUNT; -- 赋值,也可以使用select赋值
END
GO

调用:

-- 3,带输入和输出参数存储过程的调用
DECLARE @nums AS INT;
EXEC usp_ProcDemoWithInputOutputParam @empid=5,@NumRowsAffected= @nums OUTPUT;
SELECT @nums AS nums;

结果:

带返回值的存储过程

例如,以下存储过程接受@empid即职员ID作为输入参数,然后判断职员表中是否存在该职员的记录,如果存在则返回1,否则返回0.

创建存储过程代码:

IF OBJECT_ID('usp_ProcDemoWithReturnValue','P') IS NOT NULL DROP PROC usp_ProcDemoWithReturnValue;
GO
-- 4,带返回值
CREATE PROC usp_ProcDemoWithReturnValue
  @empid AS INT
AS
BEGIN
  IF EXISTS (SELECT * FROM HR.Employees WHERE empid=@empid)
    RETURN 1
  ELSE
    RETURN 0; -- 也可以声明一个变量,然后返回这个变量
END
GO

调用:

-- 4,带返回值存储过程的调用
DECLARE @status AS INT=0; --给默认值为0
EXEC @status= dbo.usp_ProcDemoWithReturnValue @empid = 5 -- int
SELECT @status AS thestatus;

结果:

(0)

相关推荐

  • MSSQL MySQL 数据库分页(存储过程)

    先看看单条 SQL 语句的分页 SQL 吧. 方法1: 适用于 SQL Server 2000/2005 复制代码 代码如下: SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) ORDER BY id 方法2: 适用于 SQL Server 2000/2005 复制代码 代码如下: SELECT TOP 页大小 * FROM table1 WHERE

  • MSSQL存储过程学习笔记一 关于存储过程

    一. 存储过程的概念,优点,语法 在写笔记之前,首先需要整理好这些概念性的东西,否则的话,就会在概念上产生陌生或者是混淆的感觉. 概念:将常用的或者是很复杂的工作,预先利用SQL语句写好并用一个指定的名称存储起来,那么以后要是调用这些SQL语句的时候,只需要利用Execute/Exec执行以下,即可. 优点:当然了,使用存储过程的优点是很多的,下面来一一说明. 1. 存储过程只是在创造的时候进行编译,以后每次执行的时候,就不需要编译了,但是直接利用SQL的话,需要每次运行的时候都重新编译一次,所

  • sqlserver存储过程语法详解

    存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.定义总是很抽象.存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server).如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起.这样做的好处至少有三个:第一.大大提高效率.存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数.第二.提高安全性.假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着

  • MySQL 存储过程中执行动态SQL语句的方法

    drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500); set my_sqll='select * from aa_list'; set @ms=my_sqll; PREPARE s1 from @ms; EXECUTE s1; deallocate prepare s1; end;

  • MSSQL监控数据库的DDL操作(创建,修改,删除存储过程,创建,修改,删除表等)

    前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理起来就会相当麻烦,容易产生混乱,如果数据库管理员不监控数据库架构变更的话,就不知道谁对数据库架构做了啥改动(此处改动仅仅只DDL操作),尤其有时候,有些开发人员可能不按规章制度办事,绕过或忘了通知发布人员或DBA,直接去生产机做一些DDL操作,那么我们就需要对数据库架构某些更改的事件进行监控,如果能够

  • mssql存储过程表名和字段名为变量的实现方法

    没有使用动态语句直接报错 错误的 复制代码 代码如下: alter proc testpapers as begin declare @tems nvarchar(max),@zidaun nvarchar(max) set @tems=select * from @tems order by @zidaun exec(@tems) end exec testpapers 消息 156,级别 15,状态 1,过程 testpapers,第 1 行 关键字 'select' 附近有语法错误. 消息

  • 实例学习mssql存储过程分析

    例1:通过存储过程查询数据库中的student表 我们知道在sql中,我们查询一个表,可以通过 select * from student  进行查询,那在存储过程中该怎么写呢? 解: 首先我们打开查询分析器,(以下举的例子中的存储过程都用查询管理器来创建); 然后我们先来创建一个存储过程以备等会使用,(就好像在编程中我们先来编一个函数一样): create procedure proc_stu as select * from student go 这样一个存储过程就创建好了,现在我们来执行一

  • mssql使用存储过程破解sa密码

    代码演示暴力破解MSSQL的帐号和密码,包括管理员帐号sa的密码. 网上有SQL Server Sa密码破解的存储过程,方法就是暴力破解MSSQL的帐号和密码,包括管理员帐号sa的密码,下面我对其它的代码稍做修改,并进行了一些性能分析. 首先说说破解过程序核心思想,就是存储帐号密码的master.dbo.sysxlogins表和未公布的密码比较存储过程pwdcompare.经过一方分析,修改了部分代码,下面贴出修改前后的代码, 一个SQL Server Sa密码破解的存储过程 复制代码 代码如下

  • MSSQL事务的存储过程

    在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示: 房型表:RoomType             房间表:Room 首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rTypeId 分析这两个表,我们会发现这样一个问题:在房间表和房型表管理中,当我们修改或者删除一个RoomType表,对应的Room表我们也要做修改和删除,那么我们怎么解决这个问题呢?首先可以在数据库中设置级联删除,或者利用

  • PHP得到mssql的存储过程的输出参数功能实现

    在开发过程中可能会遇到无法取得MSSQL存储过程的输出参数,很多朋友都不知道该怎么办,本文将详细介绍PHP得到mssql的存储过程的输出参数功能实现,需要了解的朋友可以参考下 复制代码 代码如下: <? $conn=mssql_connect("127.0.0.1","user","passwd"); mssql_select_db("mydb"); $stmt=mssql_init("pr_name"

随机推荐