关于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)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐