首页 > 代码库 > SQL学习笔记——关于参数类型的问题
SQL学习笔记——关于参数类型的问题
在使用存储过程的时候碰到一个问题:
存储过程有一个int类型的参数,可传0,1,2在存储过程中筛选数据,如果传空值则不做筛选。
然而存储过程处理该参数时会把0当作空值来处理,达不到预期效果。
解决方法 :将int型参数换为varchar型参数则不会有此问题
问题示例:
1 if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[GetUsers]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1) 2 drop procedure [dbo].[GetUsers] 3 GO 4 5 create procedure GetUsers 6 @sex int 7 as 8 begin 9 declare @sqlStr varchar(1000) 10 set @sqlStr = ‘select name, sex from users‘ 11 if (@sex <> ‘‘) 12 set @sqlStr = @sqlStr + ‘ where sex =‘ + CONVERT(varchar(10),@sex) 13 exec(@sqlStr) 14 end
上面的存储过程是根据参数@sex查找不同性别的用户,sex=0为男性,sex = 1为女性,
但实际上并不符合预期效果,如下图:
将参数@sex改为varchar类型即可。
convert
SQL学习笔记——关于参数类型的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。