今天碰到一个这样的问题:
declare @id int
select @id=5
select @id=id from tab where id=1
select @id
猜猜结果?
1、当tab存在id=1的记录,@id=1
2、当tab不存在id=1的记录,@id=5 --我以为会是null呢各位大侠还碰到什么容易让人误解的地方没,帖出来,以后大家也好注意点啊。
declare @id int
select @id=5
select @id=id from tab where id=1
select @id
猜猜结果?
1、当tab存在id=1的记录,@id=1
2、当tab不存在id=1的记录,@id=5 --我以为会是null呢各位大侠还碰到什么容易让人误解的地方没,帖出来,以后大家也好注意点啊。
select @id=(select id from tab where id=1)
补充一点
declare @id int
--select @id=5 不执行这一句
select @id=id from tab where id=1
select @id将开始的赋值语句不执行,如果id为1的不存在,那么结果又会是null了。为什么会这样呢?
select @id=(select id from tab where id=1)
create table #T (id int)
insert into #T select 2declare @id int
--select @id=5 --没有设置初始值
select @id=id from #T where id=1
select @id --那么下面的变量@sql就会变成null,那么exec(null)是不会报错的
declare @sql varchar(8000)
set @sql='update tb set col=5 where id='+ltrim(@id)
exec(@sql)
if @@error<>0
...
else
...
在复杂的存储过程中难以排查。所以,如果不能确定变量必定有值,那么请赋一个初始值给他,是有必要的。