declare @ID varchar(20) --定义一个变量叫@ID
set @ID=3 --变量赋值为3
print @ID --打印
select @ID=1 --变量赋值为1
print @ID --打印
查看结果
-------------
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
表达式返回多个值时,使用 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
--表达式未返回值时,使用 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
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的作用。