SQL存储过程的优点、创建、互相调用与调试
来源:互联网 发布:世界历史数据库 编辑:程序博客网 时间:2024/06/06 01:21
存储过程的优点:
1.只在创建时编译,一般sql语句每执行一次就编译一次,另外,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,因此可提高数据库执行速率。
2.可以实现只连接一次数据库就可以完成一个复杂的操作,如对多个表进行INSERT,UPDATE,DELETE,SELECT时,可将此复杂操作利用存储过程封装起来与数据库提供的事务处理结合使用,而不需要多次连接数据库。
3.可以重复使用、更稳定、安全,可限定使用权。
4.独立于程序,使得程序与数据库的工作独立进行。
创建一个简单的存储过程:
CREATE PROCEDURE [dbo].[SP_GetBrandByABC]@abc varchar(50),@top intASBEGIN select top(@top) BrandID,BrandName,BrandImg from LB_Brand where ABC=@abc and Auditing=1 and Isdelete=0 order by IsCommend desc,PageRank ascEND
实现sql拼接字符串的存储过程如下:
CREATE PROCEDURE [dbo].[SP_GetCompanyByDateTime]@num int,@start datetime,@end datetimeASBEGIN declare @sql varchar(8000) set @sql='select' if @num>0 set @sql=@sql+' top('+convert(varchar(10),@num)+')' set @sql=@sql+' CompanyID,ChildUrl,CompanyName from LB_Company where Auditing=1' if (@start is null)or(@end is null) set @sql=@sql+' order by CompanyID DESC' else set @sql=@sql+' and Addtime>'''+convert(varchar(50),@start)+''' and AddTime<='''+convert(varchar(50),@end)+''' order by CompanyID DESC' print @sql --用于本地查看sql语句,当用于生产时将此行去掉,因为会占用很大内存 exec(@sql)ENDGO
修改存储过程名称:
EXEC sp_rename 'OldProcName', 'NewProcName'
删除指定存储过程:
DROP PROCEDURE ProcName
存储过程调用另一个存储过程:
--根据公司ID获取访问PV值CREATE PROCEDURE [dbo].[SP_GetVisitorRecoudCount]@CompanyID intASBEGIN select @count=count(0) from (select count(0) as row from TJ_VisitorRecord b inner join ViewRecord c on b.VRID=c.VRID where DateDiff(dd,outTime,getdate())<=@TimePeriod and c.QueryPar1=@CompanyID group by b.VRID) as t return @countENDGO--根据公司ID获取访问IP量CREATE PROCEDURE [dbo].[SP_GetVisitorIPCount]@CompanyID intASBEGIN declare @count int select @count=count(0) from (SELECT count(0) as row FROM ViewRecord where DateDiff(dd,ViewTime,getdate())<=@TimePeriod and QueryPar1=@CompanyID group by ViewIP) as t return @countENDGO--填充统计临时表CREATE procedure [dbo].[SP_FillTJSummaryTemp]asbegin declare @CompanyID int declare cursor1 cursor for select CompanyID from LB_Company where Auditing=1 open cursor1 fetch next from cursor1 into @CompanyID while @@fetch_status=0 begin declare @strWhere nvarchar(50),@strWhere2 nvarchar(50),@PV int,@IP int,@UV int,@AccessTimes int --一天前(昨天) exec @PV=GetViewRecordCount 1,@CompanyID --调用存储过程GetViewRecordCount exec @IP=GetVisitorIPCount 1,@CompanyID --调用存储过程GetVisitorIPCount insert into TJ_Statistics(CompanyID, AddDate, PV, IP) values (@CompanyID,dateadd(day, -1, getdate()),@PV,@IP) fetch next from cursor1 into @CompanyID end close cursor1 deallocate cursor1endgo
另一个优点是当存储过程存在异常时,可以在查询分析器中进行实时调试,从而分析出问题所在。具体方法如下:
假设你的存储过程是ProcTest,传入参数为@num=2,@key=’abc’
在查询分析器窗口中写入语句:
exec ProcTest 2,’abc’
然后点击调试窗口中的“启动调试“,进入调试界面,按F11进行单步调试即可进入存储过程。
阅读全文
1 0
- SQL存储过程的优点、创建、互相调用与调试
- SQL存储过程的优点
- SQL存储过程的优点
- 存储过程的互相调用
- PL/Sql 中创建、调试、调用存储过程
- PL/Sql 中创建、调试、调用存储过程
- java存储过程的创建与调用
- 存储过程的优点与缺点
- 【mysql 存储过程】应用存储过程的优点与缺点
- 存储过程的优点
- 存储过程的优点
- 存储过程的优点
- 存储过程的优点
- 存储过程的优点
- 存储过程的优点
- 存储过程的优点
- 存储过程的优点:
- 存储过程的优点
- Glide使用造成OOM解决方案
- Hystrix使用入门手册(中文)
- [练习] LCA练习1(最基础)
- 归并排序
- 解决css3动画效果在360兼容模式跟猎豹浏览器下不兼容
- SQL存储过程的优点、创建、互相调用与调试
- FMS4.5/AMS5重置管理员密码方法
- 2. Add Two Numbers
- android 使用 charles抓包http https 问题 持续更新
- springcloud(九):配置中心和消息总线(配置中心终结版)
- linkmovementmethod ClickableSpan
- 商城项目实战21:实现图片上传功能
- Android开发 —— Activity启动模式
- 优秀网站