Здесь я также привел пример кода для создания условного параметра queryparam. Для целей тестирования я создал некоторые параметры и значения по умолчанию.
<cfparam name="id" default="1,2,3,4,5,6">
Установите детали запроса в виде строки и сохраните ее в другой переменной, как упомянуто выше @danRoberts.
<cfset MyQry = "SELECT * FROM pages ">
Убедитесь, что значение rc.id пустое. Если это не так, добавьте предложение IN.
<cfif len(rc.id) >
<cfset MyQry &= " WHERE id IN ( :id ) ">
</cfif>
Для справки, я также добавил несколько дополнительных операторов.
<cfset MyQry &= " limit 10 ">
Затем создайте новый запрос на основе оператора new.
<cfset qry = new Query( datasource ='yourDataSource' , sql = MyQry) >
После этого добавьте queryParam для :ID, если rc.id не пуст.
<cfif len(rc.id) >
<cfset qry.addParam( name="id", value="#rc.id#",cfsqltype="cf_sql_varchar",list='true') >
</cfif>
Примечание. При использовании INoperator вы должны установить list='true' для параметра queryParam.
Затем вы выполняете запрос, как показано ниже
<cfset Result = qry.execute().getResult() >
<cfdump var="#Result#" />
Предложение WHERE с queryParam будет выполняться только тогда, когда rc.ID содержит значение.
person
Kannan.P
schedule
30.08.2019
IN. Я считаю, что самый чистый способ - построить оператор sql условно, т.е. добавить это условие к предложениюwhere, только если параметр не пуст. Подходor, упомянутый в ссылке, действительно работает, но для этого потребуется более сложный код + sql, который менее читаем IMO. - person SOS   schedule 29.08.2019where ( column IN ( :idList ) OR :copyIDList = '' ) ... more. - person SOS   schedule 29.08.2019