SQL备忘-基本控制语句复习及@@ROWCOUNT陷阱纪实
来源:互联网 发布:js判断滚动条到底部 编辑:程序博客网 时间:2024/05/30 04:30
作者fbysss
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:SQL语句
好久不写复杂的sql语句,以至于很多东西都忘记。以至于写出@name="sss"来(应该使用单引号)
还是写日志好,一些小的知识点很快可以查到,所以有机会就赶紧贴上来,顺便给需要的人参考。
下面这段很简单,但是很容易陷入@@rowcount的“想当然”陷阱。
declare
@uid int,
@examid int,
@ugid int,
@name varchar(50),--这里必须指定长度,否则默认为1,比如set @name='sss'会截取为's'
@username varchar(50),
@row_count int--临时变量
set @uid =9008
set @examid = 0
set @ugid=1
set @name='sss'
set @username='sss'
select uid from userinfo where examid=@examid and len(ltrim(rtrim(examid)))>0
--注意这里本来想用一句 select @uid = uid from userinfo where examid=@examid and len(ltrim(rtrim(examid)))>0了事,但是那样的话,就算后面没有记录,@@rowcount也变成了1。
set @row_count= @@rowcount
/*if @@rowcount = 0--这里要千万注意,因为@@rowcount随时可能改变,所以应该使用一个变量来保存记录数
比如下面三句
1.set @row_count= @@rowcount
2.if @@rowcount = 0
3.print @@rowcount
如果1得到的记录数为0,那么print的结果是0
但是,这里也许和想象有点不一样,@@rowcount为0不是因为前面的select语句没有记录,而是因为if @@rowcount=0这句没有对数据行的影响!
这么写很有隐患,应该使用变量来保存结果
*/
print 'debug1:rowcount:'+str(@@rowcount)
if @row_count =0
begin
print 'debug2:rowcount:'+str(@@rowcount)
print '建立用户,建立用户组关联'
select @uid = uid from userinfo where examid=@examid and len(ltrim(rtrim(examid)))>0
insert into userinfo (name,username,examid) values (@name,@username,@examid) --插入用户表
insert into usergroup_rela (uid,ugid) values (@@identity,@ugid) --加入用户组
end
else
begin
print '用户已经存在,建立用户组关联'
select uid from usergroup_rela where uid = @uid and ugid=@ugid
if @@rowcount = 0
begin
insert into usergroup_rela (uid,ugid) values (@@identity,@ugid) --加入用户组
--(@@identity可以得到刚刚insert 进去的id值(由数据库自动生成)
end
else print '用户组关联已经存在'
end
- SQL备忘-基本控制语句复习及@@ROWCOUNT陷阱纪实
- Sql 语句纪实
- (复习笔记之数据库)SQL基本语句
- SQL基本语句及基础知识
- SQL语句陷阱
- 全面复习之SQL(7)-数据控制语句
- SQL%ROWCOUNT
- sql%rowcount
- sql%rowcount
- sql%rowcount
- Mysql基本语句复习
- 一段sql语句,备忘!
- SQL常用语句备忘
- SQL语句备忘
- 备忘sql语句
- SQL语句备忘
- SQL语句备忘
- sql语句备忘
- 反思引入头文件和宏定义
- NAMESPACE
- 在ASP.net中保存/取出图片入/从SQL数据库
- 人月神话:软件界面交互和易用性改进总结
- 关于ehomesolution.cn的处理办法
- SQL备忘-基本控制语句复习及@@ROWCOUNT陷阱纪实
- 我也要写blog
- Life tip
- 伟大的c
- C#中使用简单工厂模式实现命令解释器
- 三种自由发布局域网消息的技巧
- 面向对象分析与设计和面向对象语言
- 高可复用软件体系结构的基础框架元素
- JChatbox使用注意事项