SQL Server学习记录之语句优化
2015-12-15 19:43
218 查看
1、我之前写的没有优化的SQL语句:
这里我用了isnull函数,这个函数对查找到字段值和没有查找到字段值都给赋了值,这样我们就少了变量的初始化工作;而且对语句的累加操作也做了优化处理
2、判断是否存在记录的exists语句注意
我想用exists判断记录是否存在的同时取得这条记录字段的值。所以做了如下书写
但是后来发现这条语句会出现判断错误,有记录的时候也会判断为假,后面改成如下判断就没问题
总结:exists只能判断记录是否存在不能同时做赋值处理
3、关于声明语句和赋值语句的书写
声明多个变量:
赋值语句:
应该改成:
4、内连接查询
declare @getmoney int set @getmoney=0 select @getmoney=addscore from SignInRule where QMinDay=@countday //添加签到日志 set xact_abort on begin tran //修改个人金币 declare @tempmoney bigint select @tempmoney=WalletMoney from TUserInfo where UserID=@UserID update TUserInfo set WalletMoney=@tempmoney+@getmoney where UserID=@UserID //修改个人元宝 commit tran优化后的SQL语句:
declare @getmoney int select @getmoney=isnull(addscore,0) from SignInRule where QMinDay=@countday //添加签到日志 set xact_abort on begin tran //修改个人金币 update TUserInfo set WalletMoney=WalletMoney+@getmoney where UserID=@UserID //修改个人元宝 commit tran
这里我用了isnull函数,这个函数对查找到字段值和没有查找到字段值都给赋了值,这样我们就少了变量的初始化工作;而且对语句的累加操作也做了优化处理
2、判断是否存在记录的exists语句注意
我想用exists判断记录是否存在的同时取得这条记录字段的值。所以做了如下书写
declare @tempmoney int if exists(select @tempmoney=Money from TUsers where UserID=10007)
但是后来发现这条语句会出现判断错误,有记录的时候也会判断为假,后面改成如下判断就没问题
if exists(select * from TUsers where UserID=10007)
总结:exists只能判断记录是否存在不能同时做赋值处理
3、关于声明语句和赋值语句的书写
声明多个变量:
declare @money int,@age int,@name varchar(10)//这里声明不同类型的变量是对的
赋值语句:
set @money=123456,@age=543//这是不对的,不能同时对多个变量赋值
应该改成:
set @money=123456 set @age=543
4、内连接查询
--更新奖励到个人钱包 update A set A.WalletMoney=WalletMoney+T.GiveNum from TUserInfo A, (select B.UserID,C.GiveNum from TContestRecord_New B inner join Web_MatchAwardConfig C on C.TypeID=@SendTypeID and B.MatchID=@MatchID and B.RankNum=C.Rank) as T where A.UserID=T.UserID
相关文章推荐
- Windows64安装Redis及其管理工具RedisStudio
- oracle命令行操作
- mysql更改表结构:添加、删除、修改字段、调整字段顺序
- Mysql相关
- java + memcached安装
- cmd运行现有的sql文件(MySQL)出现SOURCE error 2
- mysql的事务
- MYSQL group_concat()查询关联数据一条显示
- Oracle性能优化学习笔记WHERE在连接顺序的条款
- 查询Mysql未使用的索引
- oracle数据泵示例
- 【六】MongoDB管理之副本集
- mdf与ldf文件如何还原到SQLserver数据库
- vc访问ACCESS数据库
- 直接通过ADO操作Access数据库
- MySQL的Master/Slave群集安装和配置
- oracle DB_LINK
- JDBC连接数据库代码和步骤
- mysql 主从
- MYSQL是否区分大小写