2010-11-17 9 views
12

Jak mogę uzyskać SQL używany do generowania obiektu cfquery? Jeśli cfdump obiektu, to pokazuje, że ma właściwość "SQL", która zawiera rzeczywiste zapytanie. Włączenie debugowania nie pomoże mi, ponieważ wykonuję wywołanie API, więc dane wyjściowe nie są HTML i informacja o debugowaniu go zepsułaby. Po prostu próbuję debugować dokładnie, jakie zapytanie jest wykonywane.Jak mogę uzyskać SQL z obiektu zapytania w 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. ---> 

Odpowiedz

24

Dodaj atrybut "wynikowy" do pliku cefquery. SQL jest w wynikowej strukturze, a nie zmiennej zapytania.

+0

Dang it Todd! Uderzyłeś mnie, gdy dwukrotnie sprawdzałem kod! –

+0

Rządzę. To wszystko. :) –

+9

Można również technicznie zanurzyć się w Javie i zdobyć:

0

Czy masz dostęp do włączania debugowania za pośrednictwem administratora CF? To da ci ciągłą listę wszystkich zapytań (w tym instrukcji SQL), które są wywoływane na danej stronie.

+1

"Włączenie debugowania nie pomoże mi, ponieważ wykonuję wywołanie API, więc dane wyjściowe nie są HTML i informacja o debugowaniu go zepsułaby." – Kip

4

Użyj atrybutu wyniku cfquery. Podaj nazwę zmiennej, która będzie miała klucz zwany sql z twoim 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

Jeśli cfdump-ing struktury holdingowej zapytań (nie to, co potrzebuje Kip ale potrzebowałem SQL), użyj metainfo="yes". W/O rentowności tylko zapisów zapytania 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

Osobiście lubię mieć trochę SQL, który ma wszystkie parametry umieszczone w nim (zamiast znaków zapytania?). W ten sposób mogę po prostu skopiować i wkleić kod SQL, aby uruchomić zapytanie w bazie danych. Aby to zrobić, uzyskać wynik (jak wspomniano w innych komentarzach), a następnie użyć tej funkcji ...

<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

Nie powinienem, że to może nie działać poprawnie z datami. – Luke

+0

Również nie działa poprawnie, jeśli literał jest dosłowny? wywołuje sql, tzn. wewnątrz pojedynczych cudzysłowów. – enigment

1

Jeśli dumping wyjście debugowania w regularnej produkcji pęknie rzeczy, zawsze używać <cfdump var="#myvar#" output="c:\filename.html"> w ten sposób, zrzut kończy się oddzielnym plikiem HTML.

Powiązane problemy