如何在存储过程中检查空值

时间:2013-11-27 06:31:15

标签: sql-server-2008 stored-procedures

任何人都可以告诉我如何在Sql Server 2008中为Null参数编写此检查。我需要知道如何在sql查询中而不是在查询部分之外编写条件语句。

查询

DECLARE @SelItm NVARCHAR(max) 
DECLARE @Input1 VARCHAR(100) 
DECLARE @Input2 VARCHAR(100) 

SET selitm = 'Select * from table as tbla where tbla.Id='''+@Input1+ ''' (Case when   @Input2 is not null then and tbla.supid='''+@Input2+ 
''' else '''' end)' 

EXEC Sp_executesql 
@SelItm 

2 个答案:

答案 0 :(得分:0)

看起来你错过了@ input1和案件开始之间的某些内容。

Select * 
from table as tbla 
where tbla.Id='''+@Input1+ ''' **SOMETHING_MISSING_HERE**  
 (Case when   @Input2 is not null then tbla.supid='''+@Input2+ ''' else '''' end)

当你使用一个案例时,你需要CASE的“返回”(可以这么说)元素,这是案例的THEN部分 - 比较某些东西。

例如:

'Select * 
from table as tbla 
where tbla.Id='''+@Input1+ ''' 
AND tbla.supid= 
   (Case when ''' + @Input2 + ''' is not null then '''+@Input2+ ''' else '''' end)' 

这将检查tbla.Id = @Input1 AND {@ 1}是否为空supid = @Input2或@ Input2为空supid = ''

请注意supid =与您的示例相比的展示位置。

这是你需要的那条线吗? 如果是 - 那么您可以使用ISNULL简化语句:

'Select * from table as tbla 
 where tbla.Id='''+@Input1+ ''' AND tbla.supid= ISNULL(''' + @Input2 + ''' , '')' 

然而,只是为了让事情变得更复杂;那么你将遇到一个NULL问题,你试图在动态SQL的字符串中添加NULL,并且添加NULL将导致NULL。 因此,在您的示例中,检查NULL的最佳位置是在查询之前检查@ Input2变量: 所以当你有:

DECLARE @Input2 VARCHAR(100) 

然后在设置变量之后,在动态SQL语句中使用它之前应检查NULL:

SET @Input2 = ISNULL(@Input2, '')

然后在动态sql语句中使用该变量。

答案 1 :(得分:0)

对于每个可能为null的参数,我认为你需要类似这样的东西,首先让我们尝试输入1,我希望这段代码可以帮助你。

 AND (Input1= @Input1 OR (Input1 IS NULL AND @Input1 IS NULL))