在使用存储过程的时候碰到一个问题: 存储过程有一个int类型的参数,可传0,1,2在存储过程中筛选数据,如果传空值则不做筛选。 然而存储过程处理该参数时会把0当作空值来处理,达不到预期效果。 解决方法 :将int型参数换为varchar型参数则不会有此问题 问题示例: - if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetUsers]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
- drop procedure [dbo].[GetUsers]
- GO
- create procedure GetUsers
- @sex int
- as
- begin
- declare @sqlStr varchar(1000)
- set @sqlStr = 'select name, sex from users'
- if (@sex <> '')
- set @sqlStr = @sqlStr + ' where sex =' + CONVERT(varchar(10),@sex)
- exec(@sqlStr)
- end
复制代码上面的存储过程是根据参数@sex查找不同性别的用户,sex=0为男性,sex = 1为女性, 但实际上并不符合预期效果,如下图: 将参数@sex改为varchar类型即可。
|