简体   繁体   English

As400 - 动态Sql where子句

[英]As400 - Dynamic Sql where clause

Where are trying to avoid generating two sql cursors because we just need to change the WHERE clause to a dynamic one. 哪里试图避免生成两个sql游标,因为我们只需要将WHERE子句更改为动态子句。

We have one cursor performing this WHERE clause: 我们有一个游标执行此WHERE子句:

WHERE TRIM ( USUARIO ) LIKE @USUARIO ) 
AND CAST ( M15 . FECLLEGADA AS DATE ) BETWEEN @FINI AND @FFIN 
AND M15 . ESTINBOX IN ( 'A' , 'P' )
AND URGENTE LIKE ( COALESCE ( @URGENTE , '' ) CONCAT '%' ) 

and another cursor with this WHERE CLAUSE: 和另一个带有此WHERE CLAUSE的游标:

WHERE 
    CAST ( M15 . FECLLEGADA AS DATE ) BETWEEN @FINI AND @FFIN 
    AND TRIM ( USUARIO ) LIKE @USUARIO 
    AND M15 . ESTINBOX LIKE ( COALESCE ( @ESTADO , '' ) CONCAT '%' )
    AND URGENTE LIKE ( COALESCE ( @URGENTE , '' ) CONCAT '%' ) 

Is there any way to perform this where clause in just one statement:¿ 有没有办法在一个语句中执行where where子句:¿

This is what I've tried: 这就是我尝试过的:

WHERE 
 CASE 
      WHEN @ESTADO='PR' then ESTINBOX IN ('A','P')
      ELSE M15.ESTINBOX(COALESCE (  @ESTADO , '' )    CONCAT '%' ) 
 END

Stored procedure is not compiling. 存储过程不编译。 If this is posible How could I append to the CASE WHEN additional "AND" clauses 如果这是可能的话我怎样才能在附加“AND”条款的情况下附加案例

Something like this, may be? 这样的事情可能会是什么?

... WHERE TRIM ( USUARIO ) LIKE @USUARIO 
      AND CAST ( M15.FECLLEGADA AS DATE ) BETWEEN @FINI AND @FFIN 
      AND URGENTE LIKE ( COALESCE ( @URGENTE , '' ) CONCAT '%' ) 
      AND ( 
         (@ESTADO = 'PR' AND M15.ESTINBOX IN ( 'A' , 'P' ))
         OR 
         (@ESTADO != 'PR' AND M15.ESTINBOX LIKE COALESCE ( @ESTADO , '' ) CONCAT '%' 
      )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM