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

2020-07-10 08:13:40易采站长站整理

结果
———–
  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

相关文章 大家在看