Где пытаются избежать создания двух курсоров 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
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
CASE
WHEN @ESTADO='PR' then ESTINBOX IN ('A','P')
ELSE M15.ESTINBOX(COALESCE ( @ESTADO , '') CONCAT '%')
END
Хранимая процедура не компилируется. Если это возможно Как я могу добавить к CASE WHEN дополнительные предложения «И»
Можете ли вы принять удар производительности при выполнении обоих операторов выбора и просто использовать результаты из одного? – Turophile
@Turophile - Интересно, как он сравнивается с использованием условий поиска, не относящихся к SARGable. [Временная метка, по крайней мере, может быть безопасно запрошена) (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx). DB2 на 400 игнорирует конечные пробелы для сопоставлений, поэтому «USARIO» может быть также безопасно запрошен (путем постоянного удаления стартовых пробелов или с того, чтобы их не было). –
@Turophile, проблема в том, что большой запрос почти такой же, за исключением предложения where, и я не хочу дублировать один и тот же код дважды: D –