如何获取用于生成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. --->
答案 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只产生查询 ...
<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">
答案 5 :(得分:1)
如果在常规输出中转储调试输出会破坏事情,我总是使用<cfdump var="#myvar#" output="c:\filename.html">
这样,转储就会以单独的HTML文件结束。
答案 6 :(得分:0)
您是否可以通过CF管理员打开调试功能?这将为您提供在给定页面中调用的每个查询(包括SQL语句)的滚动列表。