Как я могу получить SQL из объекта запроса в ColdFusion? - PullRequest
16 голосов
/ 17 ноября 2010

Как мне получить 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. --->

Ответы [ 7 ]

29 голосов
/ 17 ноября 2010

Добавьте атрибут 'result' в ваш cfquery.SQL находится в структуре результата, а не в переменной запроса.

18 голосов
/ 17 ноября 2010
<cfquery name="tableElements" datasource="TestSQLServer" result="r">
SELECT * FROM tableElements
</cfquery>

<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #r.SQL#</cfoutput>
7 голосов
/ 04 апреля 2014

Лично мне нравится иметь некоторый 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>
4 голосов
/ 17 ноября 2010

Использовать атрибут результата cfquery.Укажите имя переменной, которая будет иметь ключ с именем sql. Sql.

2 голосов
/ 03 апреля 2014

Если вы строите структуру, содержащую запросы (не то, что нужно Кипу, но мне нужен SQL), используйте metainfo="yes".Без получения только записей запроса enter image description here ...

<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">

examples of cfdump of a query in a struct without and with metainfo attribute

1 голос
/ 20 августа 2016

Если выгрузка вывода отладки в обычный вывод приведет к поломке, я всегда использую <cfdump var="#myvar#" output="c:\filename.html"> Таким образом, дамп заканчивается в отдельном файле HTML.

0 голосов
/ 17 ноября 2010

У вас есть доступ к включению отладки через администратора CF?Это даст вам скользящий список всех запросов (включая операторы SQL), которые вызываются на данной странице.

...