• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

数据库综合系列之存储过程

mysql 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 存储过程作用: (1) 存储过程通过参数传递,安全性高,可防止注入式攻击. (2) 查询的语句在存储过程里,与程序不相关,如果以后要修改程序或者数据库,都不会出现连锁

存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。

存储过程作用:

(1) 存储过程通过参数传递,安全性高,可防止注入式攻击.

(2) 查询的语句在存储过程里,与程序不相关,如果以后要修改程序或者数据库,都不会出现连锁反应,增加系统可扩展性.

(3) 网站执行查询的时候,只需要传递简单的参数就可以了,无论是代码优化上还是查询优化上都可以做到高效.

(4) 允许模块化编程,即,可以将一组查询写在一个过程里面,然后在程序里直接调用,而不必每次都写若干个语句来实现相应功能

具体使用:数据表来源http://blog.gaodaima.com/buyingfei8888/article/details/17399837

1 存储过程进行简单查询

if exists(select 1 from sysobjects where id=object_id('test') and xtype='P') --判断存储过程是否存在drop proc test;gocreate proc testasselect s_name 商店名字,s_address 商店地址,c_name 销售人员 from t_shop,t_cash_housewoker where s_id in(select s_id from manage where m_id=1) and t_cash_housewoker.m_id=1

执行:

exec test

对上面几个词汇解释 sysobjects object_id:

1、sysobjects 系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等 在sqlserver2005,sqlserver2008版本的数据库里,现在已经作为一个视图对象,在每一个数据库的系统视图中,都存在一个sys.sysobjects 视图对象。 sysobjects 重要字段解释: sysObjects ( Name sysname, –object 名称 id int, –object id xtype char(2), — object 类型 type char(2), — Object 类型(与xtype 似乎一模一样? 有点郁闷…) uid smallint, — object 所有者的I

本文来源gaodai.ma#com搞##代!^码网(

D … –其他的字段不常用到。 ) 注:需要解释的是 xtype 和type 是一模一样的,他的数据为: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 FN = 标量函数 IF = 内嵌表函数 K = PRIMARY KEY 或 UNIQUE 约束 L = 日志 P = 存储过程 R = 规则 RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 V = 视图 X = 扩展存储过程 AF = 聚合函数 (CLR) FS = 程序集 (CLR) 标量函数 FT = 程序集 (CLR) 表值函数 IF = 内联表函数 IT = 内部表 PC = 程序集 (CLR) 存储过程 PK = PRIMARY KEY 约束(type 为 K) SN = 同义词 SQ = 服务队列 TA = 程序集 (CLR) DML 触发器 TT = 表类型 UQ = UNIQUE 约束(type 为 K) 该表中包含该数据库中的所有对象,如有那些表 存储过程 视图 等信息 2 object_id

在sysobjects系统表中存储着数据库的所有对象,每个对象都有一个唯一的id号进行标识.
   object_id就是根据对象名称返回该对象的id.

2 带参数存储

if (object_id('test', 'P') is not null)    drop proc testgocreate proc test(@Id int)as   select s_name 商店名字,s_address 商店地址,c_name 销售人员 from t_shop,t_cash_housewoker where s_id in(select s_id from manage where m_id=@Id) and t_cash_housewoker.m_id=@Idgo

执行:

exec test 1;

3 带通配符的存储

if (object_id('test', 'P') is not null)    drop proc testgocreate proc test(@name varchar(20) = '%j%', @nextName varchar(20) = '%')as    select * from manage where m_name like @name or m_name like @nextName;go

执行:

exec test;exec test '%步%', '%u%';

4 带输出参数的存储过程

if (object_id('test', 'P') is not null)    drop proc testgocreate proc test(    @id int, --默认输入参数    @name varchar(20) out, --输出参数    @age varchar(20) output--输入输出参数)as    select @name=m_name,@age=m_bir from manage where m_id=@id

执行:

declare @id int,        @name varchar(20),        @bir varchar(20);set @id = 1; exec test @id, @name out, @bir output;select @name, @bir;print @name + '#' + @bir;

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:数据库综合系列之存储过程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址