任何人都可以告诉我如何在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
答案 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))