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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-08-17 11:46  DaBan  阅读(217)  评论(0编辑  收藏  举报