欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > MSSQL教程 > 关于SQL 存储过程入门基础(变量)

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:738

高端HTML5响应式企业通用网

2020-05-06   浏览:518

html5响应式外贸网站英文版

2020-05-08   浏览:505

HTML5自适应律师工作室类网

2020-04-04   浏览:501

HTML5影视传媒文化公司类网

2020-05-12   浏览:496

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

发布时间:2020-05-21  

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

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

在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

--结果跟上面是一样的


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

本文标签

:备案管家服务帮您把复杂流程变简单,解决您在进行网站备案过程中遇到的效率低下和成功率不高的问题。个人300/2个域名,企业500/5个域名,qq1650004.