美文网首页
【笔记】T-SQL程序

【笔记】T-SQL程序

作者: Murrey_Xiao | 来源:发表于2017-05-09 13:28 被阅读12次

    一、变量

    • DELARE @变量名 数据类型

    • 赋值:
      SET —— 赋给变量常量值
      SELECT —— 从表中查询数据,然后再赋给变量

    • 使用SET与SELECT语句赋值的区别:
      ① SET不支持对多个变量赋值,SELECT可以
      ② 表达式返回多个值时SET出错,将返回的最后一个值
      ③ 表达式未返回值时SET赋NULL,SELECT保持原值不变

    • 注意:
      批处理后局部变量会被注销,局部变量为@声明,全局变量为@@(为系统定义的变量)

    • 例子

    DECLARE @UserName varchar(10),@ID varchar(10)
    SET @UserName='李勇'
    SELECT @ID=UserID FROM Student Where Sname=@UserName
    
    Print @UserName
    Print @ID
    
    • SELECT和SET的区别
    -- 【1】同时为多个变量赋值
    DECLARE @name varchar(10),@province varchar(20)
    -- 使用SET为两个变量通知赋值 
    SET @name='张三',@province='吉林' --- 出错
    -- 使用SELECT为多个变量赋值
    SELECT @name='张三',@province='吉林' --- 允许
    
    -- 【2】表达式返回多个值
    DECLARE @province varchar(20)
    -- 前提:SELECT UserAddress FROM UserInfo --返回多个值
    -- 使用SET赋值
    SET @province = (SELECT UserAddress FROM UserInfo) -- 报错
    -- 使用SELECT赋值
    SELECT @province=UserAddres FROM UserInfo -- 允许 但是其内的值是结果集的最后一个数据
    
    -- 【3】表达式无返回值的时候
    DECLARE @name varchar(20)
    SET @name='张三'
    -- 前提:SELECT UserName FROM UserInfo WHERE UserId='yaya' -- 查询无结果
    --SET赋值
    SET @name=(SELECT UserName FROM UserInfo WHERE UserId='yaya' ) -- @name将为NULL值
    -- SELECT赋值
    SELECT @name=UserName FROM UserInfo WHERE UserId='yaya' -- @name保持原值不变
    

    二、全局变量

    • 举例
    -- 【1】IDENTITY返回的是最近一条插入语句的标识值
    -- 在没有插入数据前 @@IDENTITY的值为NULL
    SELECT @@identity
    -- 向类别表中插入一条数据
    INSERT INTO CommoditySort (SortName) VALUES('家政服务')
    SELECT @@identity -- 返回18 即'家政服务'的ID号
    
    -- 【2】ERROR:处理因为约束产生的错误
    -- 没有错误的情况 
    SELECT @@ERROR  -- 返回值为0
    -- 修改时违反检查约束
    UPDATE UserInfo SET UserPwd='123' WHERE UserId='李勇'
    -- 出错后,错误号
    PRINT @@ERROR  -- 返回547
    

    三、数据类型转换

    • 分类
      隐式转换:类型相兼容自动转换
      显式转换:使用CAST或CONVERT()函数

    • 举例

    Print '错误号:'+@@ERROR -- 类型不兼容
    -- 解决方案
    -- 【1】使用CAST函数转换
    PRINT '错误号:'+CAST(@@ERROR AS varchar(5))
    -- 【2】使用CONVERT函数转换
    PRINT '错误号:'+CONVERT(varchar(5),@@ERROR)
    
    
    
    • 两个函数进行类型转换时的异同点
      相同点:都能够把某数据类型转换为另一种数据类型
      不同点:CONVERT有三个参数,第一个参数是转换的类型,第二个是转换的变量,第三个是转换的格式,在转换日期时比较方便

    • 举例

    -- 使用两个函数分别对日期进行转换
    -- 【1】使用CAST转换当前日期
    SELECT CAST(GETDATE() AS varchar(10))
    
    -- 【2】使用CONVERT转换当前日期,111为某一种格式
    SELECT CONVERT(varchar(10),GETDATE(),111)
    
    

    四、流程控制语句

    流程控制语句:用来控制程序执行流程的语句。
    常用的流程控制语句的分类:

    顺序结构:BEGIN...END
    • 语法:
    BEGIN
      语句块
    END
    
    • 举例:
    -- 在BEGIN..END语句块中完成对两个变量的值进行交换
    DECLARE @x int ,@y int,@t int --一次性声明三个int类型变量
    SET @x=5
    SET @y=10
    BEGIN
      @t=@x
      @x=@y
      @y=@t
    END
    -- 在本示例中,BEGIN..END..可以不写 完成效果相同
    -- 但是如果在分支结构或循环结构中就必须要写
    
    分支结构:IF..ELSE...
    • 语法:
    IF(条件)
     BEGIN
       语句块
     END
    ELSE
     BEGIN
       语句块
     END
    
    • 举例:
    DECLARE @x int,@y int
    SELECT @x=10,@y=15
    IF(@x>@y)
      BEGIN
        SET @x=@y
        PRINT '@x大'
      END
    ELSE
      BEGIN
        SET @y=@x
        PRINT '@y大'
      END
    
    
    分支结构:CASE...END...
    • 语法:
    CASE 
      WHEN 条件1 THEN 结果1
      WHEN 条件2 THEN 结果2
      ...
      ELSE 其他结果
    END
    
    • 举例:
    DECLARE @score int
    SET @score=93
    SELECT 成绩=CASE
      WHEN @score>=90 THEN 'A'
      WHEN @score>=80 AND @SCORE<=89 THEN 'B'
    END
    
    循环结构WHILE
    • 语法:
    WHILE(条件)
      BEGIN
        语句或语句块
      END
    
    • 程序调试
      ALT+F5:启动调试
      F9:切换断点
      F10:逐过程
      F11:逐语句
    CONTINUE、BREAK、RETURN

    WHILE:CONTINUE
    IF:BREAK
    RETURN:直接无条件退出

    相关文章

      网友评论

          本文标题:【笔记】T-SQL程序

          本文链接:https://www.haomeiwen.com/subject/fqibtxtx.html