• sql server 变量声明、设置、使用、输出


    SQL SERVER中变量的定义、赋值与使用

    本文面向对SQL SERVER中变量操作不熟悉的用户,希望能使他们在看完本文后能对变量操作有具体和全面的认识。

    在学习SQL SERVER的过程中,很多时候需要对某些单独的值进行调试,这时就需要在SQL SERVER中对变量进行操作。

    变量能进行的操作分定义、赋值、使用三种,下面以一段简短的代码作为示例:

    --定义一个名称为@I的变量,指定其类型为整数

    DECLARE @I INT

    --对变量@I赋值为

    SET @I=3

    --输出@I的值

    SELECT @I

    这就是一个最简单的变量操作,包含上述全部三种类型。但变量能进行的操作远不止于此,下面分别进行描述:

    变量声明:

    变量声明的第一部分为关键字DECLARE,写在最前面。

    变量声明的第二部分为变量名称,必须以@开头,后面可以跟字母、数字、中文和非系统运算符的字符,如@、$、_等。

    变量声明的第三部分为变量类型,可以定义SQL SERVER中的所有常规类型,包括各种数字类型、字符串类型、时间类型等,只有极少数特殊数据类型无法在变量中定义。

    ·变量的三个部分用分隔符分开,分隔符可以由多个空格、TAB制表符、换行符组成。

    ·变量名称的大小写不区分,@A和@a指向同一个变量,不能重复定义。关键字和数据类型也是大小定不区分,含义相同。

    ·多个变量同时定义用逗号分隔多个变量名称和类型。如DECLARE @A INT,@B VARCHAR(50)。

    ·定义的变量的生命周期为同一批次或存储过程,即:在你运行的同一批语句(也就是运行时选择的所有语句)或存储过程中,定义的变量都可以使用,变量名称必须唯一。

    下面给出常用的变量定义写法,以下变量的声明方式都是合法的:

    DECLARE @A INT,@B INT

    --最常见的写法

    SET @A=1

    --如果写SET @A='XX'会报错,因为XX是字符串且无法隐式转换为数字

    SET @A='23'

    --用标量值函数赋值

    SET @A=DBO.FUN_1(@A)

    --用子查询赋值

    SET @A=(SELECT MAX(number) FROM MASTER..spt_values)

    --用其它函数赋值

    SET @A=@B

    --用表达式赋值

    SET @A=@B*5+DBO.FUN_1(@A)-(SELECT MAX(number) FROM MASTER..spt_values)

    变量赋值

    变量的赋值有多种方式,最常见的方式是以下四种:

    1. SET赋值

      对单个变量赋值可以使用SET,基本写法如下:

      SET @A='XYZ'

      需要注意的地方有:

      ·SET后的变量名称必须在本批次中已定义,大小写不限。

      ·=号后面可以写数字、字符、标量值函数、返回一行一列的子查询、其它变量、表达式等,但不能写存储过程。

      ·=号后返回的数据类型必须与变量的数据相同,或能隐式转换成变量的数据类型

      ·SET后的变量名称必须在本批次中已定义,大小写不限。

      下面给出常见的SET赋值写法:

      DECLARE @A INT,@B INT

      --最常见的写法

      SET @A=1

      --如果写SET @A='XX'会报错,因为XX是字符串且无法隐式转换为数字

      SET @A='23'

      --用标量值函数赋值

      SET @A=DBO.FUN_1(@A)

      --用子查询赋值

      SET @A=(SELECT MAX(number) FROM MASTER..spt_values)

      --用其它函数赋值

      SET @A=@B

      --用表达式赋值

      SET @A=@B*5+DBO.FUN_1(@A)-(SELECT MAX(number) FROM MASTER..spt_values)

    2. SELECT赋值

      SELECT可以被认为是基于SET的强化赋值方式,以下写法与上面SET的基本写法完全等效:

      SELECT @A='XYZ'

      SELECT还可以对多个变量同时赋值:

      SELECT @A='XYZ',@B='CC'

        SELECT还可以用查询的结果集对变量赋值:

            SELECT @A=NAME,@B=NAME+'X'

    FROM TB_CLASS

    WHERE NAME LIKE '%%'

    1. 输出参数赋值

      在定义存储过程时可以将传入的参数设定为输出参数,然后在其中为其赋值。下面是一个简短的例子:

      CREATE PROCEDURE PROC_TEST(

      @I INT OUTPUT

      )

      AS

      SET @I=@I+1

      GO

      DECLARE @J INT

      SET @J=5

      EXEC PROC_TEST @J OUTPUT

      EXEC PROC_TEST @J OUTPUT

      SELECT @J

      --7

        需要注意的是在存储过程的定义中和执行存储过程的语句中,OUTPUT关键字都是必须的,不然无法返回参数。

    1. UPDATE赋值

      UPDATE里除了可以给列赋新值,还能给变量赋值,这里就涉及到一些底层的知识和高级的用法,这里不多说,只看示例即可:

            DECLARE @I INT

            UPDATE TB SET COL1='A',@I=1

        UPDATE TB SET COL1='B',@I=LEN(col1) WHERE COL1 LIKE '%%'

    变量使用

    变量可用的地方很多,在调试函数、存储过程、查询时都会用到,只要能用表达式的地方基本上都能用变量。以下是几个典型用法:

            DECLARE @I INT

            SET @I=1

            --直接输出变量

            SELECT @I

            --使用变量调试函数

            SELECT DBO.FUN_TEST2(@I)

            --使用变量作为存储过程的输入参数

            EXEC PROC_TEST @I

            --查询中使用变量

            SELECT *

            FROM TB

            WHERE COL1>@I

            --更新中使用变量

            UPDATE TB SET COL1=@I

            WHERE COL1<>@I

    以上就是变量使用的全部说明,希望能为读者带来帮助。

  • 相关阅读:
    bzoj 1367
    codeforces 757F
    bzoj 3600
    比赛环境设置
    线段树合并
    BZOJ2105: 增强型LCP
    BZOJ3156: 防御准备
    BZOJ3252: 攻略
    BZOJ2464: 中山市选[2009]小明的游戏
    Beta Round #9 (酱油杯noi考后欢乐赛)乌鸦喝水
  • 原文地址:https://www.cnblogs.com/grj001/p/12224140.html
Copyright © 2020-2023  润新知