如何从ColdFusion中的查询对象获取SQL?

时间:2010-11-17 19:17:17

标签: coldfusion

如何获取用于生成cfquery对象的SQL?如果我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 个答案:

答案 0 :(得分:29)

在cfquery中添加“结果”属性。 SQL位于结果结构中,而不是查询变量。

答案 1 :(得分:18)

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

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

答案 2 :(得分:7)

我个人喜欢有一些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>

答案 3 :(得分:4)

使用cfquery的result属性。指定一个变量名,它将带有一个名为sql的密钥和你的sql。

答案 4 :(得分:2)

如果你正在考虑一个持有查询的结构(不是Kip需要但我需要SQL),请使用metainfo="yes"。 W / o只产生查询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

答案 5 :(得分:1)

如果在常规输出中转储调试输出会破坏事情,我总是使用<cfdump var="#myvar#" output="c:\filename.html"> 这样,转储就会以单独的HTML文件结束。

答案 6 :(得分:0)

您是否可以通过CF管理员打开调试功能?这将为您提供在给定页面中调用的每个查询(包括SQL语句)的滚动列表。