有一个where语句:
WHERE (@obsolete=(case when part.drawissno = 'OBS' then 'OBS' else 'NO' end) or @obsolete is null)
and ((CASE WHEN part.sm = 'MANUFACTURED' THEN mpfmain.mpflang END) = @country or @country IS NULL)
参数在SQL Server中正常工作,但是当将其添加到报表中时,除空值之外的所有值均不起作用。参数@ country的值:德国,西班牙,法国,意大利。仅当用户必须自己输入国家时,报告中的参数才有效。如果在参数属性中写入可用值,则它们将不起作用。其他参数(此处未包括在内)可以正常工作,但它们内部没有CASE。 CASE表达式可能是问题吗?
我看到第二个CASE表达式有2个可能的问题:
1]如果mpfmain.mpflang为NULL,则将其与带有等号的NULL进行比较。即使@country也为NULL,这也不起作用。
2)您缺少ELSE零件。它当然不是强制性的,但是请考虑如果part.sm为NULL或part.sm具有不同于“ MANUFACTURED”的值,会发生什么。
您可能会受益于列或参数周围的ISNULL方法,而不是NULL。您可以在此处阅读有关ISNULL方法的更多信息:
https://docs.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql