• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于SQL 存储过程入门基础(变量)

    上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。

    变量分文局部变量和全局变量

    局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。

    在c# 语言中,定义一个变量很简单,例如

    复制代码 代码如下:
    int i=0; --定义加赋值。

    在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量。

    看看简单的声明语法:

    复制代码 代码如下:
    Declare @Local_Var data_type

    @Local_Var是一个整体,表示一个变量。

    data_type就是数据类型了,这个大家都很熟悉的,例如int,decimal ,float,text等。

    变量声明了,怎么赋值呢,能在声明的时候赋值么?像这样

    复制代码 代码如下:
    declare @ID=2 varchar(20);

    这样是不行的,但是这样呢
    复制代码 代码如下:

    declare @ID varchar(20)=2
    print @ID  --这句话的意思是在sql server窗口中打印出变量的值
    这样是正确的,结果是
    ---------
    2

    声明可以赋值,再声明后是可以再赋值的,
    这里有两种方式赋值
    set,select ,先看基本用法,再说区别

    一,基本用法

    复制代码 代码如下:

    declare @ID varchar(20)      --定义一个变量叫@ID
    set @ID=3                    --变量赋值为3
    print @ID                    --打印 
    select @ID=1                 --变量赋值为1
    print @ID                    --打印

    查看结果
    -------------   

       
    从上面看出来了,Set,与select都可以给变量赋值。

    然后我们看看变量的运算,运算其实很简单,下面看看加减法

    复制代码 代码如下:

    declare @ID varchar(20)
    set @ID=3
    print @ID
    select @ID=1+@ID       --将变量@id加1
    print @ID
    select @ID=(select 1+5)  --类似于@ID=1+5
    print @ID
    select @ID=(select 1-@ID)  --类似于@ID=1-@ID
    print @ID

    结果
    -----------

      3
      4
      6
      -5


    我们再看看乘除法呢

    复制代码 代码如下:

    declare @ID int
    set @ID=3
    print @ID
    select @ID=2* @ID   --乘以2
    print @ID
    select @ID=(@ID/2)   --除以2
    print @ID
    select @ID=(@ID * @ID) --乘方
    print @ID

    结果
    -----------
      3
      6
      3
      9


    最后看一下模运算%

    复制代码 代码如下:

    declare @ID int
    set @ID=(10%3)
    print @ID
    select @ID=(10%2)
    print @ID

    结果
    ---------


    二,区别

    1,表达式返回多个值时

    复制代码 代码如下:

    表达式返回多个值时,使用 SET 赋值

    declare @name varchar(128)
    set @name=(select username from userinfo)
    print @name
    /*
    --出错信息为
    服务器: 消息 512,级别 16,状态 1,行 2
    子查询返回的值多于一个。当子查询跟随在 =、!=、、=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
    */


    表达式返回多个值时,使用 SELECT 赋值
    declare @name varchar(20)
    select @name= username from userinfo
    print @name --结果集中最后一个 username 列的值
    结果:
    ---------
    wangwu

    2,表达式未返回值时

    复制代码 代码如下:

    --表达式未返回值时,使用 SET 赋值
    declare @name varchar(20)
    set @name='jack'
    set @name= (select username from userinfo where username='not')
    print @name  --Null值

    结果
    --------

    --表达式未返回值时,使用 SELECT 赋值
    declare @name varchar(20)
    set @name='jack'
    select @name=username from userinfo where username='not'
    print @name  --jack,保存原来的值

    结果
    -------
    jack


    这里简单总结下

    下表列出 SET 与 SELECT 的区别。

    条件   set  select 
    表达式返回多个值 出错 将返回的最后一个值赋给变量
    表达式未返回值 变量被赋为null值 变量保持原值

    下面来看个综合的例子

    复制代码 代码如下:

    CREATE PROCEDURE UserLogin1   --创建一个存储过程来判断登录
    @name varchar(20),
    @password varchar(20),
    @inReturn int output          --输出参数

    AS
    --这里来定义一个变量来保存密码
    Declare @strPwd varchar(20) 
    BEGIN

        select @strPwd=userPass from userinfo where userName=@name  --通过select 给变量@strPwd赋值
        if(@password=@strPwd)
            begin
                set @inReturn=1
                 --假设来更新个时间
                 update userinfo set registertime=getdate() where userName=@name
             end
        else
        set @inReturn=-1   --如果密码不正确,返回-1
    END
    GO

    --测试方法
    declare @test int
    exec UserLogin1 'admin','admin',@test output  --这里如果没有output关键字,则@test的值为NULL
    print @test
    结果:
    -------------


      (1 行受影响)
      1
    --或这样调用:
    declare @test int
    EXEC UserLogin1 @name='admin',@password='admin',@inReturn=@test output
    print @test

    --结果跟上面是一样的


    --如果我们登录不正确,像这样

    declare @test int
    EXEC UserLogin1 @name='admin1',@password='admin',@inReturn=@test output
    print @test     结果
    -------------
     -1             --这里的值是存储过程中设置的值。如果失败,则返回-1,这就是output的作用。

    上一篇:关于SQL 存储过程入门基础(流程控制)
    下一篇:关于SQL 存储过程入门基础(基础知识)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    关于SQL 存储过程入门基础(变量) 关于,SQL,存储,过程,入门,