SQL变量的使用

-一、在T—Sql中使用变量
--(一)局部变量
--1声明变量  @age和@name
  
 declare @age int
 declare @name nvarchar(50)


--2赋值
----(1)方法1
  set @age=20
  set @name='ll'
  print @age
  print @name


----(2)方法2


  select @age=20
  select @name='ss'
  select @age,@name
--3分别使用set和select 为行号变量@rcount赋值
   use MySchool
   declare @rcount int
   --set @rcount=(select COUNT(*) from Student)
   
   select @rcount=COUNT(*) from Student
   print @rcount
--计算score表中english平均成绩,如果〉=60,查询正数前三名,否则找出倒数前三名。
  declare @count int
  select @count=COUNT(*) from Score
  declare @sum int
  select @sum=SUM(english) from Score
  declare @avg int
  select @avg=floor(@sum/@count)
  if @avg>=60
   begin
       select * from Score order by english desc
   end
   else
    begin
       select * from Score order by english asc
    end


--4通过while 计算1---100之间奇数的和。
   
    declare @sums int=0
    declare @i int=1
     while @i<=100
     begin
        if @i%2<>0
        begin
          set @sums+=@i
        end
         set @i+=1
     end
    print @sums
--5通过while 计算1---100之间偶数的和。
 
    declare @sumss int=0
    declare @j int=1
    while @j<=100
      begin
          if @j%2=0
           begin
            set @sumss+=@j
           end
          set @j+=1
      end
   print @sumss
--6使用while实现如果english不及格的人超过半数,则给每个人增加2分,循环加
--直到不及格的人数少于一半。
    select * from Score
    insert Score (studentId,math) values (3,76)
    select * from Score where english<60
    
     declare @countEnglish int
     set @countEnglish=(select COUNT(scoreId) from Score)
     declare @loster int
     set @loster=(select COUNT(*) from Score where english<60)
     if @loster<@countEnglish
      begin
         update Score set english+=2 where english<60
         set @loster=(select COUNT(*) from Score where english<60)
      end


--7使用事务实现--转账问题:从0001账户转1000块到0002账户。
    
    create table bank
    (
      sName nvarchar(50),
      balance money
    )
    insert bank 
    select '001',1000 union
    select '002',10
    select * from bank
    truncate table bank
    
    begin transaction --打开事务
    begin try
        declare @countError int
        update bank set balance-=900 where sName='001'
        set @countError+=@@error
        update bank set balance+=900 where sName='002'
        set @countError+=@@error
        commit --提交
        print '提交'
    end try
    begin catch
        rollback --回滚
        print '回滚'
    end catch
--8打开"隐式事务":设置为开,删除表中数据,回滚!
--(默认情况为关,如果打开了则不自动提交,学要手动提交)
    select * from bank
    begin tran--打开事务
insert into Bank values('0005',4200000)
rollback--手动回滚或提交事务
  set implicit_transactions on
  delete from bank
  rollback
  
--9关闭“隐式事务”。
----如果隐式事务打开,然后删除某个表,在事务没有结束前,其它查询不能访问该表。


  set implicit_transactions off
  
--10使用系统存储过程
--   给数据'Test'重命名为:'Test123'
  
   exec sp_renamedb 'Test','Test123'


--   查询当前数据库中有多少个表
  
     exec sp_tables


--   查询当前数据库中student表中的列信息


   exec sp_columns 'Student'
   
--11自定义存储过程 “usp_Helloworld”并使用。实现输出hello world!


   create proc usp_Helloworld
   as
    begin
       print 'hello world'
    end
    
    exec usp_Helloworld
    --查询库名
    exec sp_databases
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值