VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 批处理教程 >
  • MSSQLSERVER数据库- 变量和批处理

       当作学习总结吧!以下的内容很早以前就有人写过。但我还是要再写一下,一是练一下自己写这方面文章的能力,二是对知识点的学习有一下重温和加深。
        SQL语言也跟其他编程语言一样,拥有变量、分支、循环等控制语句。之前我不清楚应该把这些归到哪个名词上,直到前晚我看到有篇文章是在讲SQL语句批处理,所有我就把SQL里的变量、分支、循环等控制语句归到批处理来。在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量。
 
先来看一下局部变量:
        局部变量使用declare关键字给变量声明,语法非常简单:declare @<变量名> <变量类型> [,@<变量名> <变量类型> [.. ]]
        从上面的[,@<变量名> <变量类型> [.. ]]这里我们可以看出他能一次声明多个变量,变量声明后但未赋值前,其值为NULL。对变量的赋值可以使用set关键字,使用set关键字时对变量的赋值一次只能赋值一个。
         来看一个实例:

  可以看到在没有赋值前,他输出的是NULL。使用set关键字对变量的赋值一次只能赋值一个,那么怎么对多个变量进行赋值?这时可以使用select关键字

      我们也可以在查询语句里面对这个变量进行赋值例如: select @name=sName from student where sid=1;

 

再来看一下全局变量

        SQL Server有30多个全局系统变量,但有几个是常用到的,如下SQL语句

 

SQL语句里的脚本

  脚本提供了变量、分支、循环等控制语句,可以用来实现一些复杂的任务,SQL语句里的流程控制语句包括:

  • IF…ELSE 
  • GOTO 
  • WHILE 
  • WAITFOR 
  • TRY/CATCH
  • CASE

  1、我们先来看一下IF...ELSE语句,语法的格式如下:

IF<Boolean Expression><SQL statement>|

BEGIN<code series>

END[ELSE<SQL statement> |

BEGIN <code series>

END]

注意,使用代码行时,别忘了BEGIN与END,这里的BENGIN...END 相当于C语言里的{ } 另外,对于IF判断有一个陷阱,就是 if @var = NULL.这样子写法是不对的,因为NULL不等于任何东西,甚至也不等于NULL,应该写成: if @var IS NULL。我们来看一下具体的实例:

在SQL里是没有if...elseif...else的,那么该怎么实现类型于if...elseif...else的作用呢? 可以下面这个例子

 2、While语句

    看一下下面这个例子:

 3.CASE...END

   case...end的语法格式如下:

      CASE EXPRESSION

      WHEN VALUE1 THEN RETURNVALUE1
      WHEN VALUE2 THEN RETURNVALUE2
     ELSE DEFAULTRETURN VALUE
   END
  我们通过一下SQL代码例子来加深一下加CASE...END的理解:
--查找STUDENT表,当年龄是19岁时显示青年,18岁显示小伙,其他年龄显示少年
    SELECT SAGE,
        CASE SAGE
            WHEN '19' THEN '青年'
            WHEN '18' THEN '小伙'
            ELSE '少年'
        END
    FROM student
 
--CASE..END的用处很多,我们可以使用他在客户等级,管理员级别的时候用到。例如当客户等级值为1表示普通用户,当客户等级用2表示VIP用户
--其中一个CASE可以产生一个列,多个CASE就会产生多个列
 
--举一个踪合列子,显示员工姓名/年龄/工资
--工资级别在1-5K 那么初级,工资级别在5-10K 那么中级,工级级别在10K以上 那么是高级。
    select fname,fage,
        (
        case fsalary
            WHEN fsalary>1000 and fsalary<=5000 then '初级'
            WHEN fsalary>5000 and fsalary<=10000 then '中级'
            WHEN fsalary>10000 then '高级'
            else '未分级'
        ) as '工资级别'
    from table
 
--有两张表如下,如何用SQL语句实现第二张表来显示第一张表的内容
--第一张表:
    name   subject  result
       张三   语文     80
       张三   数学     90
       张三   英语     100
       李四   语文     77
       李四   数学     88
       李四   英语     99
--第二张表:
 
      name    语文   数学    英语
      李四     77     88      99   
        张三     80     90      100
 --SQL语句如下
     select [name]
            sum(case subject
            when '语文' then result
            end) as '语文'
            sum(case subject
            when '数学' then result
            end) as '数学'
            sum(case subject
            when '英语' then result
            end) as '英语'
        group by [name]

  

WAITFOR语句 WAITFOR语句表示时间等待,语法如下: WAITFOR DELAY <’time’> | TIME <’time’>
DELAY参数指定等待的时间量,不能指定天数,只能指定小时,分钟,秒。最大的延迟时间是24小时,
例如:
WAITFORDELAY '00:01'
select * from Score

TIME参数指定等到一天中某个特定时刻。同样也只能用24小时制: WAITFOR TIME ‘01:00’; 等到今天01:00时刻执行下面的语句

 出处:https://www.cnblogs.com/cxeye/archive/2012/08/09/2630154.html



相关教程