Подтвердить что ты не робот

Как я могу получить SQL из объекта запроса в ColdFusion?

Как я могу получить 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. --->
4b9b3361

Ответ 1

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

Ответ 2

<cfquery name="tableElements" datasource="TestSQLServer" result="r">
SELECT * FROM tableElements
</cfquery>

<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #r.SQL#</cfoutput>

Ответ 3

Лично мне нравится иметь некоторый 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

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

Ответ 5

Если вы создаете структуру, содержащую запросы (не то, что нужно Кипу, а мне нужен 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

Ответ 6

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

Ответ 7

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

Ответ 8

Извините за провал, но, возможно, кто-то хотел бы отметить, что этот (result.SQL) не будет эффективным, если вы используете (настоятельно рекомендуется) <cfqueryparam>. Выходные данные будут возвращать вопросительные знаки для этих параметров.