您的位置:首页 > 数据库

[传智播客学习日记]SQL语句一例通之二——查询、存储过程

2011-11-22 21:45 731 查看
一、一个例子看明白select语句的用法——查询本月通话总时长最多的前三个呼叫员的编号
先分析一下题目,这道题有几个限制条件,
首先是本月,这里要用时间函数,然后是总时长,要用聚合函数,之后是最多,需要用排序,最后是三个,用top。
搭出select...where...group by...order by...的框架。
首先,查询的目标是前三人的编号,还要显示总时长,就是:
select top 3 [CallerNumber],...... from CallRecords
总时长的话,可以这样取:
sum(datediff(ss,[StartDateTime],[EndDateTime]))
发现这里用到了聚合函数sum,那肯定要:
group by [CallerNumber]
既然查找的是本月,那就:
where datediff(month,[StartDateTime],'2010-07-1') = 0
最高的前三名一定是要排序的,所以
order by sum(datediff(ss,[StartDateTime],[EndDateTime])) desc

于是答案就是:
select top 3 [CallerNumber], sum(datediff(ss,[StartDateTime],[EndDateTime])) from CallRecords
group by [CallerNumber]
where datediff(month,[StartDateTime],'2010-07-1') = 0
order by sum(datediff(ss,[StartDateTime],[EndDateTime])) desc

二、一个例子看明白带返回参数的存储过程——登陆成功判断
声明:这种方法判断用户名密码正确与否很不科学,只是演示存储过程而已!
首先定义存储过程,传进来用户Id和密码,返回成功与否的bit值,然后定义一个usrCount计数变量,在数据库里找用户信息,如果找到了,则计数位1,否则为0。
create proc [dbo].[usp_CheckLogin]
@loginId varchar(100),
@loginPwd varchar(100),
@isSuccess bit output
as
begin
declare @usrCount int
set @usrCount = (select count(*) from TblUser where loginId=@loginId and loginPwd=@loginPwd)
if (@usrCount > 0)
set isSuccess = 1;
else
set isSuccess = 0;
end
调用这个存储过程:
declare @isOK bit
exec usp_CheckLogin @loginId='用户名',@loginPwd='密码',@IsSuccess=@isOK output
可以通过这条语句查看结果:
print @isOK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐