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










