Ответ 1
Добавьте атрибут 'result' к вашему cfquery. SQL находится в результирующей структуре, а не в переменной запроса.
Как я могу получить SQL, используемый для создания объекта cfquery? Если я cfdump объект, он показывает, что он имеет свойство "SQL", которое содержит фактический запрос. Включение отладки не поможет мне, потому что я делаю вызов API, поэтому вывод не HTML, а информация об отладке может его сломать. Я просто пытаюсь отлаживать именно тот запрос, который выполняется.
<cfquery name="tableElements" datasource="TestSQLServer">
SELECT * FROM tableElements
</cfquery>
<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #tableElements.SQL#</cfoutput> <!--- Error: Element SQL is undefined in TABLEELEMENTS. --->
Добавьте атрибут 'result' к вашему cfquery. SQL находится в результирующей структуре, а не в переменной запроса.
<cfquery name="tableElements" datasource="TestSQLServer" result="r">
SELECT * FROM tableElements
</cfquery>
<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #r.SQL#</cfoutput>
Лично мне нравится иметь некоторый SQL, у которого есть все параметры, вставленные в него (а не вопросительные знаки). Таким образом, я могу просто скопировать и вставить SQL для запуска запроса в базе данных. Для этого я получаю результат (как упоминалось в других комментариях), затем используйте эту функцию...
<cffunction name="getRealSQL" returntype="string">
<cfargument name="qryResult" type="any">
<cfset realSQL = arguments.qryResult.sql>
<cfloop array="#arguments.qryResult.sqlParameters#" index="a">
<cfscript>
if (NOT isNumeric(a)) a = "'#a#'";
realSQL = Replace(realSQL, "?", a);
</cfscript>
</cfloop>
<cfreturn realSQL>
</cffunction>
Используйте атрибут result cfquery. Укажите имя переменной и у вас будет ключ с именем sql с вашим sql.
Если вы создаете структуру, содержащую запросы (не то, что нужно Кипу, а мне нужен SQL), используйте metainfo="yes"
. Без получения только записей запроса ...
<cfset stx={}>
<cfquery name="stx.q" datasource="myDataSource">
select emp_id from employees where 1=2
</cfquery>
<cfdump var="#stx.q#">
<cfdump var="#stx.q#" metainfo="yes">
Если отладочный вывод отладки в регулярном выпуске приведет к поломке вещей, я всегда использую <cfdump var="#myvar#" output="c:\filename.html">
Таким образом, дамп заканчивается в отдельном HTML файле.
Есть ли у вас доступ для включения отладки через администратора CF? Это даст вам список всех запросов (включая SQL-запросы), которые вызывается на данной странице.
Извините за провал, но, возможно, кто-то хотел бы отметить, что этот (result.SQL) не будет эффективным, если вы используете (настоятельно рекомендуется) <cfqueryparam>
. Выходные данные будут возвращать вопросительные знаки для этих параметров.