How can I get the SQL from a query object in ColdFusion?
Use the result attribute of cfquery. Specify a variable name and that will have a key called sql with your sql.
<cfquery name="tableElements" datasource="TestSQLServer" result="r">
SELECT * FROM tableElements
</cfquery>
<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #r.SQL#</cfoutput>
Personally I like to have some SQL that has all the parameters inserted into it (rather than the ? question marks). This way I can just copy and paste the SQL to run a query on the database. To do this, I get a result (as mentioned in other comments), then use this function...
<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>
Add a 'result' attribute to your cfquery. The SQL is in the result struct, not the query variable.