2013-06-10 2 views
1

Имея немного проблем с вставкой LIKE и использованием подстановочного знака в моем параметре в моем запросе с использованием coldfusion. Вот что в настоящее время работает:Использование шаблона в cfqueryparam - Coldfusion

<cfquery name="sample" datasource="database"><!---Take the query here---> 
    SELECT * <!---select all---> 
    FROM table <!---from the table "table" 
    WHERE 
    <cfloop from="1" to="#listLen(selectList1)#" index="i"> 
     #ListGetAt(selectList1, i)# = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ListGetAt(selectList2,i)#" /> <!--- 
                search column name = query parameter 

                using the same index in both lists 
                (selectList1) (selectList2) ---> 
    <cfif i neq listLen(selectList1)>AND</cfif> <!---append an "AND" if we are on any but 
               the very last element of the list (in that 
               case we don't need an "AND"---> 
    </cfloop> 
</cfquery> 

Моя цель состоит в том, чтобы получить код где-нибудь, где я могу ввести параметр, как так (но он не работает в настоящее время - ошибка чтения не может выполнить запрос)

<cfquery name="sample" datasource="database"><!---Take the query here---> 
    SELECT * <!---select all---> 
    FROM table <!---from the table "table" 
    WHERE 
    <cfloop from="1" to="#listLen(selectList1)#" index="i"> 
     #ListGetAt(selectList1, i)# LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#ListGetAt(selectList2,i)#%" /> <!--- 
                search column name = query parameter 

                using the same index in both lists 
                (selectList1) (selectList2) ---> 
    <cfif i neq listLen(selectList1)>AND</cfif> <!---append an "AND" if we are on any but 
               the very last element of the list (in that 
               case we don't need an "AND"---> 
    </cfloop> 
</cfquery> 
+0

Я предлагаю включить отладку, скопировать созданный ею запрос и затем запустить его в вашем анализаторе запросов. Обычно я могу найти все свои ошибки. –

+0

Этот синтаксис должен работать. Я использую то же самое против MS SQL Server. Может ли один из элементов списка быть пустым и вызывает ошибку запроса? –

+0

@ Miguel-F No. Запрос появляется в разделе № 1 кода, но не в разделе кода # 2 – Zac

ответ

0

Ваш синтаксис выглядит отлично. Я использую такую ​​же логику в некоторых моих кодах, работающих с Microsoft SQL Server.

Попробуйте это, чтобы отладить ваш код и увидеть SQL, который сгенерирован.

<!--- Comment out your query tag to debug <cfquery name="sample" datasource="database"> --->

<cfoutput> <!--- add a cfoutput tag to "see" your generated code ---> 
SELECT * 
FROM table 
WHERE 
<cfloop from="1" to="#listLen(selectList1)#" index="i"> 
    #ListGetAt(selectList1, i)# LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#ListGetAt(selectList2,i)#%" /> 
    <cfif i neq listLen(selectList1)>AND</cfif> 
</cfloop> 
</cfoutput> <!--- add a cfoutput tag to "see" your generated code ---> 

<!--- Comment out your query tag to debug </cfquery> --->

Это, скорее всего, разорвать остальную часть кода, который зависит от запроса. Я обычно просто придерживаюсь тега <cfabort> после закрытия тега </cfoutput>, чтобы остановить обработку и просто показать мне SQL.

Целью этого является вывод сгенерированного кода SQL в ваш браузер. Посмотрите на это и посмотрите, можете ли вы обнаружить ошибку. Вы также можете скопировать и вставить сгенерированный SQL в ваш инструмент запроса (анализатор запросов) и протестировать его таким образом.

Смежные вопросы