带有可选参数的存储过程

时间:2014-03-12 18:35:42

标签: sql-server tsql stored-procedures

我有一个C#应用程序,它将参数发送到以下存储过程:

@Lot nchar (112)= NULL,              

@Oper nchar (112)= NULL

SELECT  [Lot].Lot,

lot.Oper

FROM DB
where (@Lot is null or ( Lot= @Lot)) 
and (@Oper is null or ( Oper= @Oper))

如果我在申请表中留空,我无法获得任何结果。

1 个答案:

答案 0 :(得分:0)

我的猜测是你的应用程序肯定是一个“空白”字段将是一个空字符串。最有可能的是,您的代码将获取该空白字符串并将其作为参数传递给存储过程。因此,您的默认值(NULL)未使用,而@Lot和/或@Oper的值为''

如果是这种情况,那么您的SELECT查询就是有效的:

select ...
from DB
where Lot = ''
and Oper = '';

在传递参数值之前检查空字符串,如果是这种情况,则只是不要将这些参数传递给存储过程。或者在后端处理(这不是我的第一选择,但它仍然是一个选项)。