当前位置: 代码迷 >> SQL >> SQL变量的应用
  详细解决方案

SQL变量的应用

热度:92   发布时间:2016-05-05 12:55:04.0
SQL变量的使用
-一、在T—Sql中使用变量
--(一)局部变量
--1声明变量  @[email protected]
  
 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 [email protected]
   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(@[email protected])
  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+[email protected]
        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+[email protected]
           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
  相关解决方案