仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1254|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之存储历程进门与进步

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:24 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。将经常使用的或很庞大的事情,事后用SQL语句写好并用一个指定的称号存储起来,那末今后要叫数据库供应与已界说好的存储历程的功效不异的服务时,只需挪用execute,便可主动完成命令。甚么是存储历程呢?
界说:
将经常使用的或很庞大的事情,事后用SQL语句写好并用一个指定的称号存储起来,那末今后要叫数据库供应与已界说好的存储历程的功效不异的服务时,只需挪用execute,便可主动完成命令。
讲到这里,大概有人要问:这么说存储历程就是一堆SQL语句罢了啊?
Microsoft公司为何还要增加这个手艺呢?
那末存储历程与一样平常的SQL语句有甚么区分呢?
存储历程的长处:
1.存储历程只在制造时举行编译,今后每次实行存储历程都不需再从头编译,而一样平常SQL语句每实行一次就编译一次,以是利用存储历程可进步数据库实行速率。
2.当对数据库举行庞大操纵时(如对多个表举行Update,Insert,Query,Delete时),可将此庞大操纵用存储历程封装起来与数据库供应的事件处置分离一同利用。
3.存储历程能够反复利用,可削减数据库开辟职员的事情量
4.平安性高,可设定只要某此用户才具有对指定存储历程的利用权
存储历程的品种:
1.体系存储历程:以sp_开首,用来举行体系的各项设定.获得信息.相干办理事情,
如sp_help就是获得指定工具的相干信息
2.扩大存储历程以XP_开首,用来挪用操纵体系供应的功效
execmaster..xp_cmdshellping10.8.16.1
3.用户自界说的存储历程,这是我们所指的存储历程
经常使用格局
Createprocedureprocedue_name
[@parameterdata_type][output]
[with]{recompileencryption}
as
sql_statement
注释:
output:暗示此参数是可传回的
with{recompileencryption}
recompile:暗示每次实行此存储历程时都从头编译一次
encryption:所创立的存储历程的内容会被加密
如:
表book的内容以下
编号书名代价
001C言语进门$30
002PowerBuilder报表开辟$52
实例1:查询表Book的内容的存储历程
createprocquery_book
as
select*frombook
go
execquery_book
实例2:到场一条记录到表book,并查询此表中一切书本的总金额
Createprocinsert_book
@param1char(10),@param2varchar(20),@param3money,@param4moneyoutput
withencryption---------加密
as
insertbook(编号,书名,代价)Values(@param1,@param2,@param3)
select@param4=sum(代价)frombook
go
实行例子:
declare@total_pricemoney
execinsert_book003,Delphi控件开辟指南,$100,@total_price
print总金额为+convert(varchar,@total_price)
go
存储历程的3种传回值:
1.以Return传回整数
2.以output格局传回参数
3.Recordset
传回值的区分:
output和return都可在批次程式顶用变量吸收,而recordset则传回到实行批次的客户端中
实例3:设有两个表为Product,Order,其表内容以下:
Product
产物编号产物称号客户订数
001钢笔30
002羊毫50
003铅笔100
Order
产物编号客户名客户订金
001南山区$30
002罗湖区$50
003宝安区$4
请完成按编号为毗连前提,将两个表毗连成一个一时表,该表只含编号.产物名.客户名.订金.总金额,
总金额=订金*订数,一时表放在存储过程当中
代码以下:
Createproctemp_sale
as
selecta.产物编号,a.产物称号,b.客户名,b.客户订金,a.客户订数*b.客户订金as总金额
into#temptablefromProductainnerjoinOrderbona.产物编号=b.产物编号
if@@error=0
printGood
else
printFail
go
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 11:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表