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

所属分类: 数据库 / MsSql 阅读数: 1478
收藏 0 赞 0 分享

上一篇我们讲到了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 Server中使用ISNULL执行空值判断查询

这篇文章主要介绍了在SQL Server中使用ISNULL执行空值判断查询,ISNULL的好处是可以直接写在SELECT查询语句中,需要的朋友可以参考下
收藏 0 赞 0 分享

揭秘SQL Server 2014有哪些新特性(1)-内存数据库

微软SQL Server 2014提供了众多激动人心的新功能,但其中最让人期待的特性之一就是代号为” Hekaton”的内存数据库了,内存数据库特性并不是SQL Server的替代,而是适应时代的补充,现在SQL Server具备了将数据表完整存入内存的功能。那么今天我们就先来看
收藏 0 赞 0 分享

揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buffer Pool(缓冲池) 扩展

SQL Server 2014 中引入的缓冲池扩展提供数据库引擎缓冲池的非易失性随机存取内存(即固态硬盘)扩展的无缝集成,从而显著提高 I/O 吞吐量。 那么今天我们来探究下,这个功能到底如何强悍吧
收藏 0 赞 0 分享

揭秘SQL Server 2014有哪些新特性(3)-可更新列存储聚集索引

可更新的列存储索引作为SQL Server 2014的一个关键功能之一,在提升数据库的查询性能方面贡献非常突出。据微软统计,在面向OLAP查询统计类系统中,相比其他SQL传统版本的数据库,报表查询的性能最大可提升上十倍。
收藏 0 赞 0 分享

揭秘SQL Server 2014有哪些新特性(4)-原生备份加密

SQL Server原声备份加密对数据安全提供了非常好的解决方案。使用原生备份加密基本不会增加备份文件大小,并且打破了使用透明数据加密后几乎没有压缩率的窘境。
收藏 0 赞 0 分享

解决SqlServer 各版本 sa帐户不能登录问题

我们在使用SqlServer的时候,经常会遇到sa账号不能登录的问题,那么我们怎么来处理这个问题呢,分享下个人的思路及方法
收藏 0 赞 0 分享

浅析SQL Server中包含事务的存储过程

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。那么在存储过程里添加事务,则可以保证该事务里的所有sql代码要么完全执行要么完全不执行。
收藏 0 赞 0 分享

深入分析MSSQL数据库中事务隔离级别和锁机制

事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。
收藏 0 赞 0 分享

SQL优化技巧指南

这篇文章主要介绍了SQL优化的方方面面的技巧,以及应注意的地方,需要的朋友可以参考下
收藏 0 赞 0 分享

人工智能自动sql优化工具--SQLTuning for SQL Server

SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用。对于同一条件下的SQL语句写法有很多,其中一些写法往往对性能又有很大影响。但是每个人掌握SQL语言的水平不同,如何才能保证写出高性能的SQL呢?
收藏 0 赞 0 分享
查看更多