2009-08-14 79 views
6

我熟悉这种语法在SQL Server中,连接字符串在我的结果集:是否可以在查询的ColdFusion查询中执行字符串连接?

SELECT 'foo' + bar AS SomeCol 
FROM SomeTable 

我愿做类似查询的ColdFusion的查询中:

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

这是Flex应用程序使用的服务的一部分,因此我在返回客户端之前优化了应用程序中其他位置使用的存储过程的结果 - 剥离未使用的列,并从某些动态路径信息编译图像URL 。

我可以写一个新的存储过程,是以图像根作为参数,并做了这一切,我可能会性能原因,但问题仍然唠叨我。我还没有找到可用的语法,所以我想知道是否有可能。

当我尝试了上面,我得到以下错误:

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

有没有人这样做呢?有可能,可能是用另一种语法?

回答

11

是的,这是可能的。我认为问题在于image_id很可能是一个数值。如果你把它作为一个varchar,那么它应该没问题。

<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

我碰到这个时候我把它转换成存储过程,但谢谢。 – 2009-08-14 17:21:12

+0

但是如何通过postgres数据库连接相同的字符串 – 2013-01-07 10:55:39

+0

通过使用ANSI标准的连接运算符'||' – 2015-03-06 16:45:35

5

我想你提到的错误是由于在最后一串接逗号,在thumbnailImage结束。

只是我的$ 0.002

+0

同意100%。如果示例代码是实际使用的代码,则最后的逗号是交易断路器。好点。 – jyoseph 2009-08-15 03:38:39

0

,甚至当你需要串连不是ColdFusion的水平,但在查询本身:

在我的例子

,我已经一个,我想挖与查询结果对象查询查询。查询结果有10栏数据和1000行,列名是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

这听起来像一个非常专业的案例。通常最好避免动态sql,因为它可以将“数据库”查询暴露给sql注入。更不用说数据库通常很难优化。 – Leigh 2017-04-08 15:13:16

相关问题