Stored procedures Firebird SQL使用<;如果>;在<;其中>;

Stored procedures Firebird SQL使用<;如果>;在<;其中>;,stored-procedures,if-statement,firebird,where,clause,Stored Procedures,If Statement,Firebird,Where,Clause,我尝试在FB 2.5中构建一个SP,如下所示: where ( (kunde between :kdvon and :kdbis) and (AdrGrp between :AdrGrpvon and :AdrGrpbis) and (auftragstyp between :AuftrTypVon and :AuftrTypBis) and (Status between :s

我尝试在FB 2.5中构建一个SP,如下所示:

where 
   (
      (kunde between :kdvon and :kdbis)
      and 
          (AdrGrp between :AdrGrpvon and :AdrGrpbis)
      and
          (auftragstyp between :AuftrTypVon and :AuftrTypBis)
      and
          (Status between :statusvon and :statusbis)
      and
      IF LFDNR <> 0 THEN (LFDNUMMER  = :LFDNR)
      IF BESTELLTAG <> 0 then (bestelldatum  = :BESTELLTAG)
   )
在哪里
(
(kunde介于:kdvon和:kdbis之间)
及
(AdrGrp介于:ADRGRPON和:AdrGrpbis之间)
和
(auftragstyp介于:AuftrTypVon和:AuftrTypBis之间)
和
(状态介于:statusvon和:statusbis之间)
和
如果LFDNR为0,则(LFDNUMMER=:LFDNR)
如果BESTELLTAG为0,则(bestelldatum=:BESTELLTAG)
)
在插入If语句之前,它一直运行良好。 在那之后我得到了消息 SQL错误代码=-104。 令牌未知-第156行第14列。 LFDNR

IF条件定义为输入参数。使用冒号:将它们标记为参数无效

问题: 可以这样使用“如果”在“哪里”内吗? 我必须如何使用条件参数

短暂性脑缺血发作 Rolf

试试这个:

...
AND (LFNDR = 0 OR LFDNUMMER = :LFDNR)
AND (BESTELLTAG = 0 OR bestelldatum = :BESTELLTAG) 

(我不知道
LFNDR
BESTELLTAG
是否是
=0
子句中的参数/变量或列-如果它们是参数(与右侧部分相同),您可能应该用“:”标记它们)

我必须删除使用的标准值:
和(:LFDNR为null或LFDNUMMER=:LFDNR)
工作正常。非常感谢。0或“”值的类型转换不正确(得到另一个错误)。由于它们被设置为“无”,我删除了标准值。所以这些参数有空值(如果没有传递值),我可以针对空值或值进行测试。这很好。您没有指定参数的数据类型。它们可能无法与
0
相比。对于“未指定”IMHO,Null是比0更好的选项,因此我相信您做出了一个很好的选择。