热爱测试,主要研究性能测试和自动化测试方面的技术,希望与同样对测试有热情的你一同进步成长
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
Rj M3aZ+V)pp
好久不写复杂的sql语句,以至于很多东西都忘记。以至于写出@name="sss"来(应该使用单引号)51Testing软件测试网3^.]QaA
B$f
还是写日志好,一些小的知识点很快可以查到,所以有机会就赶紧贴上来,顺便给需要的人参考。
Z:D"HD5\*fR,i}0下面这段很简单,但是很容易陷入@@rowcount的“想当然”陷阱。51Testing软件测试网"eJ
uN'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-gj1^)D$s!Z0@username varchar(50),51Testing软件测试网?l't-y-w!}DD
@row_count int--临时变量51Testing软件测试网'rbC0aa.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"Rwb+[&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 rwO9i
begin
c7[ qZi@ ~0 51Testing软件测试网!g\1DhTT%Mdq
print 'debug2:rowcount:'+str(@@rowcount)51Testing软件测试网D_ nWUI$t7|V
print '建立用户,建立用户组关联'51Testing软件测试网5X?/tW3[
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~"Po B'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!\S5tU&{
if @@rowcount = 0
!Ml5ud:oQq@0W0 begin
9\m
[(vI)@ u6Ab0 insert into usergroup_rela (uid,ugid) values (@@identity,@ugid)--加入用户组
yC&N1NsE0--(@@identity可以得到刚刚insert 进去的id值(由数据库自动生成)
c7Ps0^ovG/nS(d(_2K0 end
q5qs[H.B'qz0 else print '用户组关联已经存在'
@C%}S?#E+q4R j0end 51Testing软件测试网x3q8rT\+yt
51Testing软件测试网Q7t!Q}Ax
51Testing软件测试网0Z!E)jC:C
i2Dj8ZFy+J8m0
相关阅读:
- c#多线程的学习(1)(转) (zibeike, 2007-7-26)
- 有关正则表达式的资料 (zibeike, 2007-7-27)
- c#多线程的学习(2)(转) (zibeike, 2007-7-27)
- 大数据量生成工具源代码(DELPHI) (zibeike, 2007-8-02)
- 神奇的Javascript, 很好看的效果呀 (zibeike, 2007-8-04)
- (转)多线程编程的设计模式 临界区模式(一) (zibeike, 2007-8-08)
- Pagefile.sys是什么文件? (zibeike, 2007-8-28)
- 用Visual Sutdio创建ASP.NET程序出错的方法 (zibeike, 2007-9-11)
- 形象解释回调函数的文章 (zibeike, 2007-9-20)
收藏
举报
TAG:
软件开发