MSSQL基本知识--后续会慢慢补充
①MSSQL常用数据类型说明:如图
②变量
变量分为: 局部变量: 局部变量必须以标记@作为前缀 ,如@Age int 局部变量:先声明,再赋值
全局变量(系统变量): 全局变量必须以标记@@作为前缀,如@@version 全局变量由系统定义和维护, 我们只能读取,不能修改全局变量的值
print 'SQLServer的版本'+@@VERSION print '服务器名称: '+@@SERVERNAME print ‘最后一次放生的错误号'+convert(varchar(5),@@ERROR) print @@identity
实例1:
计算平均分数并输出,如果平均分数超过60分输出成绩最高的三个学生的成绩,否则输出后三名的学生
1 declare @avg float 2 select @avg=avg(sEnglish) from score 3 if(@avg>60) 4 begin 5 print '前三名' 6 select top 3 * from score order by sEnglish desc 7 end 8 else 9 begin 10 print '后三名' 11 select top 3 * from score order by sEnglish asc 12 end
实例2:
--如果不及格的人超过半数(考试题出难了),则给每个人增加2分
1 declare @sum int 2 3 declare @failCount int 4 5 declare @i int 6 7 set @i=1 8 9 select @sum=count(*) from score0 10 11 select @failCount=count(*) from score0 where english<60 12 13 while(@failCount>@sum/2) 14 15 begin 16 17 if(@i<8) 18 19 begin 20 21 update score0 set english=english+2 22 23 select @failCount=count(*) from score0 where english<60 24 25 end 26 27 else break 28 29 end 30 31 update score0 set english=100 where english>100 32 33 select count(*) from score0 where english<60 34 35 select * from score0
③事务
如:转账问题: 假定钱从A转到B,至少需要两步: A的资金减少 然后B的资金相应增加
1 --创建表 2 3 create table bank 4 5 ( 6 7 cId char(4) primary key, 8 9 balance money, --余额 10 11 ) 12 13 alter table bank add constraint CH_balance check(balance >=10) 14 15 go 16 17 insert into bank values('0001',1000) 18 19 insert into bank values('0002',10) 20 21 go 22 23 update bank set balance=balance-1000 where cid='0001' 24 25 update bank set balance=balance + 1000 where cid='0002'
--这样做会出现错误,因为当剪掉1000后 就会受到约束的限制,导致+1000可以 但是-1000出错
正确的办法是:
1 begin transaction 2 declare @error int 3 set @error = 0 4 update bank set balance=balance-1000 where cid='0001' 5 set @error = @error + @@error 6 update bank set balance=balance + 1000 where cid='0002' 7 set @error = @error + @@error 8 if @error != 0 9 rollback transaction 10 else 11 commit transaction 12 go 13 select * from bank