2009-08-14 23 views
6

benim sonuç kümesindeki dizeyi bitiştirmek için SQL Server sözdizimi bu tür aşina olduğum:Bir ColdFusion Sorgu Sorgusunda dize birleştirme yapmak mümkün mü?

SELECT 'foo' + bar AS SomeCol 
FROM SomeTable 

Ben Sorgularının bir ColdFusion Query içinde benzer bir şey yapmak istiyorum:

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

Bu, Flex uygulamasının kullandığı bir hizmetin bir parçası olduğundan, istemciye geri dönmeden önce istemciye geri dönmeden önce saklı bir yordamın sonucunu optimize ediyorum - kullanılmayan sütunları sıyırma ve bazı dinamik yol bilgisinden görüntü URL'lerini derleme .

Ben performans nedenleriyle için yeni saklanan, parametre olarak görüntü kökünü alır ve bu işlemlerin tamamını prosedürü ve muhtemelen olacak I yazabilirim, ama soru hala başımın etini edilir. Henüz çalışan bir sözdizimi bulamadım, bu yüzden mümkün olup olmadığını merak ediyorum.

Yukarıda deneyin

, aşağıdaki hata olsun:

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

kimse bu yapılır mı? Belki başka bir sözdizimi ile mümkün mü?

cevap

11

Evet, bu mümkün. Sorun şu ki, image_id büyük olasılıkla sayısal bir değer. Eğer bir varchar olarak yayınlarsanız, o zaman iyi olmalıdır.

<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

ama Teşekkürler. –

+0

Ancak, aynı dize, –

+0

kullanılan postalar veritabanını eşleme nasıl ANSI standart birleştirme işlecini kullanarak || || –

5

Bahsettiğiniz hatanın, thumbnailImage'ın sonundaki son birleştirmedeki virgül nedeniyle olduğunu düşünüyorum.

Sadece benim $ 0,002

+0

% 100 katılıyorum. Örnek kod kullanılan gerçek kod ise, son virgül anlaşma kırıcıydı. İyi nokta. – jyoseph

0

hatta sen coldfusion düzeyde ama sorguda kendisi mezler gerektiğinde: benim örnekte

, neyle içine kazmak istiyorum zaten bir sorgu sonucu nesne var sorguların sorgulanması. Sorgu Resul TObject verilerinin 10 sütun ve 1000 satır vardır, sütun adları C1, C2, C3, C4, c5, ... vardır

<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> 
Bir saklı yordam bunu dönüştürüldüğünde bu koştum
+0

Bu çok özel bir durum gibi geliyor. Mümkün olduğunda dinamik sql'den kaçınmak daha iyidir çünkü "veritabanı" sorgularını sql enjeksiyonuna maruz bırakabilir. Bir db için optimize etmek genellikle söz etmek daha da zordur. – Leigh

İlgili konular