关于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的作用。

(0)

相关推荐

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

    上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用. 变量分文局部变量和全局变量 局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲. 在c# 语言中,定义一个变量很简单,例如 复制代码 代码如下: int i=0; --定义加赋值. 在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量. 看看简单的声明语法: 复制代码 代码如下: Declare @Local_Var data_type @Loc

  • 关于SQL 存储过程入门基础(流程控制)

    这里我们讲一下存储过程的流程控制, if else,case ,while,这里没有for循环的 ,这些跟c,c++,c#等语言都差不过的. 一,首先来看if  else使用 复制代码 代码如下: if 条件beginsql 语句endelse beginsql语句end 看个简单例子 复制代码 代码如下: declare @id int           --声明个变量set @id=5                 --设置厨初始值if(@id=1)    begin        pr

  • 关于SQL 存储过程入门基础(基础知识)

    大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧.为了以后发展,决定从零开始学习下. 这里看看存储过程的定义, 存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行. 在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程. 系统SP,主要存储master 数据

  • Oracle PL/SQL语言入门基础

    正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

  • Python入门基础之变量及字符串

    目录 变量 关于变量 变量名命名规则 字符串 原始字符串 长字符串 总结 变量 当把一个值赋给一个名字时,它就会存储在内存中,我们把这块内存称为变量(variable). 在大多数语言中,都把这种行为称为"给变量赋值"或"把值存储在变量中".不过,Python与大多数其他语言不同,它并不是把值存储在变量中,而更像把名字贴在值上面.所以,有些人会说Python没有变量,只有名字.变量就是一个名字,通过这个名字,我们可以找到想要的东西. 例如: 变量之所以称之为变量,正

  • Java Mybatis框架入门基础教程

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

  • MySQL数据库基础篇之入门基础命令小结

    本文实例讲述了MySQL数据库入门基础命令.分享给大家供大家参考,具体如下: 在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出炉的 2019 年3月份数据库流行度排行榜上,第一梯队的前三个数据库产品都获得了显著的加分增长. 其中 Oracle 上升了15.12分,MySQL上升了30.96分,SQL Server则上升了 7.79分.以下是前20

  • sql存储过程实例--动态根据表数据复制一个表的数据到另一个表

    动态根据表数据复制一个表的数据到另一个表 把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中 如:mac_id=12345678910,则后两位10 对应表为track_10,就把此记录复制到track_10中 创建一个 sub_track的存储过程实现: -- 创建一个 名为sub_track的存储过程 CREATE PROCEDURE sub_track() begin declare i int; -- 定义 循环变量i set @imei =0; -- 定

  • JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运算符(+,-,*,/,++,--,%).比较运算符(>,<,<=,>=,==,===,!=,!==).逻辑运算符(||,&&,!).条件运算(?:).位移运算符(|,&,<<,>>,~,^)和字符串运算符(+). 可能很多人不知道&quo

  • asp.net sql存储过程

    Visual Studio.Net为SQL的存储过程提供了强大的支持,您既可以通过visual studio.net来新建存储过程,也可以直接在Sql Server的查询分析器中运行,还可以通过企业管理器创建,使用起来也非常方便.大家一直都误认为SQL存储过程是一个比较"高深"的技术,其实掌握一般的语法是没有什么大问题的,而我们在使用存储教程中也主要是增删减的操作,学会使用一般的T-SQL就很容易上手了. 我们先来看一下在Sql-server中是如何创建一个存储过程的吧,我们可以使用S

随机推荐