热爱测试,主要研究性能测试和自动化测试方面的技术,希望与同样对测试有热情的你一同进步成长

SQL存储过程相关

上一篇 / 下一篇  2007-09-27 17:57:34 / 个人分类:软件开发

(jK(uts@#N#I0http://blog.csdn.net/fbysss/archive/2006/07/08/892750.aspx51Testing软件测试网BBz(t*b;o

转 :SQL备忘-基本控制语句复习及@@ROWCOUNT陷阱纪实    

0t2q.iP??I9] C0作者fbysss51Testing软件测试网[)y Q/Zg"T
msn:jameslastchina@hotmail.com 51Testing软件测试网~0w0wbu#g
blog:blog.csdn.net/fbysss
[9ea.C \L m0声明:本文由fbysss原创,转载请注明出处
j'NDj-X |0关键字:SQL语句51Testing软件测试网,iF9O RjM3a Z+V)pp
       好久不写复杂的sql语句,以至于很多东西都忘记。以至于写出@name="sss"来(应该使用单引号)51Testing软件测试网3^.]QaA B$f
还是写日志好,一些小的知识点很快可以查到,所以有机会就赶紧贴上来,顺便给需要的人参考。
Z:D"HD5\*f R,i}0下面这段很简单,但是很容易陷入@@rowcount的“想当然”陷阱。51Testing软件测试网"eJ u N'Y^X8{
declare51Testing软件测试网4];H1Y-i/J|
@uid int,
@2L P ~@D0@examid int,51Testing软件测试网 { qnz?
@ugid int,
$FP7z!kn._0@name varchar(50),--这里必须指定长度,否则默认为1,比如set @name='sss'会截取为's'
0Q-g j1^)D$s!Z0@username varchar(50),51Testing软件测试网?l't-y-w!}DD
@row_count int--临时变量51Testing软件测试网'rbC0a a.jRn^^
set @uid =900851Testing软件测试网#CPF;tV z3aj
set @examid = 051Testing软件测试网o.HI5MkVK4c)n
set @ugid=151Testing软件测试网uk$}CP
set @name='sss'51Testing软件测试网B4~0Z0M'J.^
set @username='sss'51Testing软件测试网 J;`?N!F0n ?C)O
select uid from userinfo whereexamid=@examidand len(ltrim(rtrim(examid)))>0
m _-}p/G5`\t7M+X0--注意这里本来想用一句 select  @uid =  uid from userinfo whereexamid=@examidand len(ltrim(rtrim(examid)))>0了事,但是那样的话,就算后面没有记录,@@rowcount也变成了1。
cK*W^p{Rw(L0set @row_count= @@rowcount51Testing软件测试网's~$}xgg@t
/*if  @@rowcount = 0--这里要千万注意,因为@@rowcount随时可能改变,所以应该使用一个变量来保存记录数51Testing软件测试网*j~ql"R wb+[&P p f
比如下面三句51Testing软件测试网9M{)W-f_Od$_
1.set @row_count= @@rowcount
|7ur6wn\02.if @@rowcount = 0
/a^3`(A!l'r03.print @@rowcount51Testing软件测试网;T6KqDs
如果1得到的记录数为0,那么print的结果是0
]_(JIS!G0但是,这里也许和想象有点不一样,@@rowcount为0不是因为前面的select语句没有记录,而是因为if @@rowcount=0这句没有对数据行的影响!
#_Q-`}Y*TW]q0这么写很有隐患,应该使用变量来保存结果51Testing软件测试网-d_s7{8}`6y
*/

+P(?UI)]o"q9P0print 'debug1:rowcount:'+str(@@rowcount)51Testing软件测试网ZE8wx4S A U#c
if @row_count =051Testing软件测试网;[c&v!m r wO9i
begin  
c7[ qZi@~0       51Testing软件测试网!g\1DhTT%Mdq
 print 'debug2:rowcount:'+str(@@rowcount)51Testing软件测试网D_nWUI$t7|V
 print '建立用户,建立用户组关联'51Testing软件测试网5X?/t W3[
 select  @uid =  uid from userinfo whereexamid=@examidand len(ltrim(rtrim(examid)))>0
UItqtxk7?b{{0 insert into userinfo (name,username,examid) values (@name,@username,@examid)  --插入用户表 51Testing软件测试网J)fi^(I.X
 insert into usergroup_rela (uid,ugid) values (@@identity,@ugid) --加入用户组51Testing软件测试网2H Y2~"PoB'j
end
|?1GD}1R0Xz iWk0else
4y8pZ9S7Z.G0begin
fT7x)C;?0        print '用户已经存在,建立用户组关联'
2x$ty3f.u&PT:R5j0        select uid from usergroup_rela where uid = @uid andugid=@ugid51Testing软件测试网3I!\S5t U&{
        if @@rowcount = 0
!Ml5ud:oQq@0W0 begin  
9\m [(vI)@ u6Ab0            insert into usergroup_rela (uid,ugid) values (@@identity,@ugid)--加入用户组
yC&N1N sE0--(@@identity可以得到刚刚insert 进去的id值(由数据库自动生成)

c7Ps0^ovG/nS(d(_2K0        end
q5q s[H.B'qz0 else             print '用户组关联已经存在'
@C%}S?#E+q4Rj0end    51Testing软件测试网 x3q8rT\+yt
51Testing软件测试网Q7t!Q}Ax

51Testing软件测试网0Z!E)jC:C

 

i2Dj8ZFy+J8m0

TAG: 软件开发

guchenggao的个人空间 引用 删除 guchenggao   /   2012-05-30 15:49:57
5
 

评分:0

我来说两句

Open Toolbar