2010-11-17 28 views
12

¿Cómo puedo obtener el SQL utilizado para generar un objeto cfquery? Si copio el objeto, muestra que tiene una propiedad "SQL", que contiene la consulta real. Encender la depuración no me ayudará porque estoy haciendo una llamada API, por lo que el resultado no es HTML y la información de depuración lo rompería. Solo intento depurar exactamente qué consulta se está ejecutando.¿Cómo puedo obtener el SQL de un objeto de consulta en ColdFusion?

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

Respuesta

24

Agregue un atributo 'resultado' a su cfquery. El SQL está en la estructura de resultado, no en la variable de consulta.

+0

Dang it Todd! ¡Me pegaste mientras revisaba mi código! –

+0

I regla. Eso es todo. :) –

+9

También podría bajar técnicamente a Java y obtenerlo:

0

¿Tiene acceso para activar la eliminación de errores a través del administrador de CF? Eso le dará una lista de todas las consultas (incluidas las declaraciones SQL) que se convocan en una página determinada.

+1

"Activar la depuración no me ayudará porque estoy realizando una llamada API, por lo que el resultado no es HTML y la información de depuración lo rompería". – Kip

4

Utilice el atributo de resultado de cfquery. Especifique un nombre de variable y que tendrá una clave llamada sql con su 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

Si está cfdump-ción una estructura que sostiene consultas (no lo necesita Kip pero necesitaba el SQL), utilice el metainfo="yes". W/o rendimientos sólo los registros de la consulta 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

Personalmente me gustaría tener un poco de SQL que tiene todos los parámetros insertados en ella (en lugar de los signos de interrogación?). De esta forma, puedo simplemente copiar y pegar el SQL para ejecutar una consulta en la base de datos. Para ello, consigo un resultado (como se ha mencionado en otros comentarios), a continuación, utilizar esta función ...

<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

No debería de que esto no funcione correctamente con las fechas. – Luke

+0

¿También no funciona correctamente si puede haber literal? chars el sql, es decir, unos dentro de comillas simples. – enigment

1

Si vertido salida de depuración en la salida normal sería romper cosas, yo siempre uso <cfdump var="#myvar#" output="c:\filename.html"> De esta manera, el volcado termina en un archivo HTML separado.

Cuestiones relacionadas