首页 > 数据库 >SQL备忘-基本控制语句复习及@@ROWCOUNT陷阱纪实

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

时间:2023-09-04 16:00:49浏览次数:37  
标签:ugid uid rowcount -- 备忘 ROWCOUNT SQL print examid


作者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

标签:ugid,uid,rowcount,--,备忘,ROWCOUNT,SQL,print,examid
From: https://blog.51cto.com/u_16245757/7351843

相关文章

  • 泛微E-cology HrmCareerApplyPerView.jspSQL注入漏洞
    漏洞简介泛微OAE-CologyHrmCareerApplyPerView.jsp文件存在SQL注入漏洞,攻击者通过漏洞可以获取服务器数据库敏感文件影响版本泛微OAE-Cologyv8.0漏洞复现fofa语法:app="泛微-协同办公OA"登录页面如下:POC/pweb/careerapply/HrmCareerApplyPerView.jsp?id=1%20union%20......
  • 泛微E-cology LoginSSO.jsp SQL注入漏洞 CNVD-2021-33202
    漏洞简介泛微e-cology是专为大中型企业制作的OA办公系统,支持PC端、移动端和微信端同时办公等。泛微e-cology存在SQL注入漏洞。攻击者可利用该漏洞获取敏感信息。漏洞影响泛微e-cology8.0漏洞复现fofa语法:app="泛微-协同办公OA"登录页面如下:POC:/upgrade/detail.jsp/log......
  • 泛微E-cology FileDownloadForOutDoc SQL注入漏洞(CVE-2023-15672)
    漏洞简介泛微e-cology未对用户的输入进行有效的过滤,直接将其拼接进了SQL查询语句中,导致系统出现SQL注入漏洞。远程未授权攻击者可利用此漏洞获取敏感信息,进一步利用可能获取目标系统权限等。影响版本Ecology9.x补丁版本<10.58.0;Ecology8.x补丁版本<10.58.0漏洞复现fo......
  • Mysql获取时间处理
    前置:当前时间:2023-09-04 Mysql获取昨天0点时间:SELECTTIMESTAMP(date_add(curdate(),INTERVAL-1DAY));  Mysql获取昨天23点59分59秒时间:SELECTDATE_SUB(DATE_ADD(CURRENT_DATE,INTERVAL0DAY),INTERVAL1SECOND)   Mysql获取当天0点的时间:S......
  • SQL概述
    SQL(StructuredQueryLanguage,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。DDL:数据定义语言。CREATE\ALTER\DROP\ RENAME\ TRUNCATEDML:数据操作语言。INSERT\DELETE\UPDATE\SELECTDCL:数据控制语言。COMMIT\ROLLBACK\SAVEPOINT\GRANT......
  • Oracle sqlldr笔记
    需求:有两列0X开头的guid,需要合并并转换为10进制数值。控制文件如下:LOADDATAINFILE“/home/xxxdbfile/xxxdb/xxx.txt”truncateINTOTABLExxx_USER.TTTTTTABLEFIELDTERMINATEBY“”TRAILINGNULLCOLS—这个是指如果上面的列中,有空的列载入,不报错(IDsequence(max,1),......
  • mysql各个执行阶段
    问题如果表T中没有字段k,而你执行了这个语句select*fromTwherek=1,那肯定是会报“不存在这个列”的错误:“Unknowncolumn‘k’in‘whereclause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?分析优化器会进行优化分析,比如用先执行哪个条件参考......
  • MySQL MGR集群部署运维常用脚本
    Linux系统-部署-运维系列导航 安装、初始化操作汇总注意:Pass.Test.123替换为真实的root账号密码,Repl.pass.123替换为真实的mgr集群创建时group_replication_recovery通道的密码 #初始化、重置mysqlrm-rf/data/mysql/;mkdir-p/data/mysql/data/data/mysql/log;......
  • MySQL联表查询优化
    Linux系统-部署-运维系列导航  sql执行顺序执行FROM语句执行ON过滤join添加外部行执行where条件过滤执行groupby以及分组语句,(开始使用select中的别名,后面的语句中都可以使用别名)执行havingselect列表执行distinct去重复数据执行orderby字句执行limit字句 ......
  • MybatisPlus处理Mysql的json类型
    MybatisPlus处理Mysql的json类型1、在数据库表定义JSON字段;2、在实体类加上@TableName(autoResultMap=true)、在JSON字段映射的属性加上@TableField(typeHandler=JacksonTypeHandler.class);1.实体类中有个属性是其他对象,或者是List;在数据库中存储时使用的是mysql的json格式,此......