在哪里试图避免生成两个sql游标,因为我们只需要将WHERE子句更改为动态游标。As400 - Dynamic Sql where子句
我们一个光标执行此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 '%')
,并与该另一个游标WHERE子句:
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 '%')
有什么办法来执行此where子句中只有一个声明:¿
这就是我试过的:
WHERE
CASE
WHEN @ESTADO='PR' then ESTINBOX IN ('A','P')
ELSE M15.ESTINBOX(COALESCE ( @ESTADO , '') CONCAT '%')
END
存储过程不编译。如果这是可行的我怎么能追加到CASE当 额外的“AND”条款
你可以接受执行两个select语句在一起的性能,只使用一个结果吗? – Turophile
@Turophile - 我想知道它与使用非SARGable搜索字词的比较。 [时间戳至少可以安全地查询](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx )。 400上的DB2忽略尾随空白进行比较,所以'USARIO'也可能被安全地查询(通过永久删除前导空白或者如果没有任何开头)。 –
@Turophile,问题是大的查询几乎是一样的,除了where子句和我不想要两次相同的代码:D –