上一篇我们讲到了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,存储过程,变量
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]