• 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
  • 相关阅读:
    v$db_object_cache
    选出有行连接(row chain)或者是行迁移(row migeration)的表
    选出需要rebuild的索引
    bitmap index
    log4j使用简介
    找出需要分析的表以及delete超过阀值(你设定)的表
    10Android Wifi 移植配置
    9 Android WIFI 驱动移植
    10Android Wifi 移植配置
    7framework详解
  • 原文地址:https://www.cnblogs.com/qiqiBoKe/p/2791625.html
Copyright © 2020-2023  润新知