2009-08-14 2 views
6

ho familiarità con questo tipo di sintassi in SQL Server, per concatenare le stringhe nel mio set di risultati:È possibile eseguire concatenazioni di stringhe in una query di query ColdFusion?

SELECT 'foo' + bar AS SomeCol 
FROM SomeTable 

mi piacerebbe fare qualcosa di simile all'interno di una query ColdFusion di query:

<cfquery name="qOptimize" dbtype="query"> 
    select 
     image_id AS imageId, 
     '#variables.img_root#' + image_id + '.' + image_ext AS fullImage, 
     '#variables.img_root#' + image_id + 't.' + image_ext AS thumbnailImage, 
    from qLookup 
    order by imageId asc 
</cfquery> 

Questo fa parte di un servizio utilizzato da un'applicazione Flex, quindi sto ottimizzando il risultato di una stored procedure utilizzata altrove nell'applicazione prima di tornare al client - estraendo le colonne inutilizzate e compilando gli URL delle immagini da alcune informazioni sul percorso dinamico .

potrei scrivere una nuova stored procedure che accetta la radice immagine come parametro e fa tutto questo, e probabilmente sarà per motivi di prestazioni, ma la questione è ancora mi fastidioso. Non ho trovato una sintassi che funzioni ancora, quindi mi chiedo se è possibile.

Quando provo quanto sopra, ottengo il seguente errore:

Query Of Queries syntax error.
Encountered "from. Incorrect Select List, Incorrect select column,

qualcuno ha fatto questo? È possibile, forse con un'altra sintassi?

risposta

11

Sì, questo è possibile. Penso che il problema sia che image_id è molto probabilmente un valore numerico. Se lo lanci come varchar, dovrebbe andare bene.

<cfquery name="qOptimize" dbtype="query"> 
    select 
     image_id AS imageId, 
     '#variables.img_root#' + cast(image_id as varchar) + '.' + image_ext AS fullImage, 
     '#variables.img_root#' + cast(image_id as varchar) + 't.' + image_ext AS thumbnailImage 
    from qLookup 
    order by imageId asc 
</cfquery> 
+0

mi sono imbattuto in questo quando ho convertito a una stored procedure, ma Grazie. –

+0

Ma come concatenare la stessa stringa se il database di Postgres è in uso –

+0

Utilizzando l'operatore di concatenazione standard ANSI '||' –

5

Penso che l'errore menzionato sia dovuto alla virgola all'ultimo concatenamento, alla fine di thumbnailImage.

Solo il mio $ 0,002

+0

Accetto 100%. Se il codice di esempio era il codice effettivo utilizzato, l'ultima virgola era l'interruttore di offerta. Buon posto – jyoseph

0

o anche quando è necessario il concatenare non sul livello di ColdFusion ma nella query stessa:

nel mio esempio, ho già un oggetto di risultato della query che voglio scavare con query di query. l'interrogazione TObject Resul ha 10 colonne di dati e di 1000 righe, i nomi delle colonne sono C1, C2, C3, C4, C5, ...

<cfset dbzeilerest = "2 4 - 3"><!--- beg qoq to concatenate those columns ---> 
    <cfset sqlcodehere = "("> 
    <cfloop list="#dbzeilerest#" delimiters="," index="t"> 
     <cfif val(t) GT 0> 
      <cfset sqlcodehere = sqlcodehere & "C" & val(t) & " || "> 
     <cfelse> 
      <cfset sqlcodehere = sqlcodehere & "'" & t & "' || "> 
     </cfif> 
    <!--- concat in coldfusion sql qoq: 
      (C2 || ' ' || C4 || ' ' || '-' || ' ' || C3) as combii ---> 
    </cfloop> 
    <cfset sqlcodehere = sqlcodehere & " '') as combii"> 
    <cfquery name="dbtexttemp2" dbtype="query"> 
    SELECT DISTINCT #PreserveSingleQuotes(sqlcodehere)# FROM dbtexttemplistequery 
    </cfquery> 
+0

Sembra un caso molto specializzato. In genere è meglio evitare SQL dinamico quando possibile, perché può esporre query "database" a SQL injection. Per non parlare di ciò è spesso più difficile da ottimizzare per un db. – Leigh