2010-11-17 46 views
12

如何获取用于生成cfquery对象的SQL?如果我cfdump该对象,它显示它有一个“SQL”属性,其中包含实际的查询。打开调试不会帮助我,因为我正在进行API调用,所以输出不是HTML,调试信息会打断它。我只是试图调试什么查询正在执行。如何从ColdFusion中的查询对象获取SQL?

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

回答

24

将'result'属性添加到您的cfquery中。 SQL位于结果结构中,而不是查询变量。

+0

当它托德!当我仔细检查我的代码时,你击败了我!我的规则是 – 2010-11-17 19:59:44

+0

。就这些。 :) – 2010-11-17 20:04:29

+9

您也可以技术上深入Java并获得它: 2010-11-17 20:06:33

0

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

+1

“开启调试不会帮助我,因为我正在进行API调用,所以输出不是HTML,调试信息会打破它。” – Kip 2010-11-17 19:56:04

4

使用cfquery的结果属性。指定一个变量名称,并在SQL中使用名为sql的键。

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

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

如果您cfdump-ING结构拿着查询(不是硖需要,但我需要的SQL),使用metainfo="yes"。 W/O率只有查询enter image description here的记录...

<cfset stx={}> 
<cfquery name="stx.q" datasource="norsmaster"> 
    select staff_key from _staff 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

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> 
+0

我不应该认为这可能无法正确使用日期。 – Luke 2014-08-11 18:50:57

+0

如果可能有文字,也不能正确工作?字符的SQL,即单引号内的。 – enigment 2017-05-08 11:32:55

1

如果经常输出的倾倒调试输出将打破东西,我总是用<cfdump var="#myvar#" output="c:\filename.html"> 这样,转储结束于一个单独的HTML文件中。