子查询中CFQUERYPARAM的神秘错误

时间:2012-02-07 19:39:50

标签: sql-server-2008 coldfusion

我在带有子查询的查询中从SQL Server收到常见错误,其中子查询中有CFQUERYPARAM

具体错误是:

  

[Macromedia] [SequeLink JDBC驱动程序] [ODBC套接字] [Microsoft] [SQL Server Native Client 10.0]语法错误,权限违规或其他非特定错误

我已经能够将它提炼到这个查询(简化)

<cfquery name="statusQuery" datasource="#application.dsn#">
SELECT 
    *
FROM 
    BStatus A  
WHERE 
    A.FY = <cfqueryparam cfsqltype="cf_sql_decimal" value="2012" > 
    AND 
    A.BStatus like '0%' 
    AND 
    A.BStatus != '00' 
    AND 
    A.BDate = (
            SELECT 
                MAX(B.BDate) 
            FROM BStatus B 
            WHERE 
                B.FY = <cfqueryparam cfsqltype="cf_sql_decimal" value="2012" > 
                AND 
                B.BStatus like '0%' 
                AND 
                B.BTrack = A.BTrack 
                AND 
                B.BCode = A.BCode 
    ) 
    AND 
    A.BCode ='XYZ123AB' 
</cfquery>

FY列定义为decimal(4,0)。我已经尝试了处理数字的每个cfsqltype(cf_sql_integer,cf_sql_numeric,cf_sql_real,cf_sql_float等),它们都给出了相同的结果。

如果我将子查询中的CFQUERYPARAM更改为直接值(例如,2012),则查询工作正常。显然,我会非常偏好来使用CFQUERYPARAM

  • ColdFusion 9.0
  • SQL Server 2008

不幸的是,由于其他情况,我不能使用ColdFusion附带的SQL Server驱动程序,但必须使用ODBC桥。数据库定义为系统DSN。

ODBC桥是否是原因?我在过去的项目中的子查询中有CFQUERYPARAM,所以这真的让我失望。

2 个答案:

答案 0 :(得分:0)

你尝试过不同的cfsqltype吗?我会尝试cf_sql_integer和cf_sql_varchar,看看是否有任何工作。我从来没用过_decimal;不过,我使用了_float。

答案 1 :(得分:0)

我怀疑,密钥似乎是ODBC桥。我使用SQL Server驱动程序设置了不同的数据源,并且我能够在子查询中使用CFQUERYPARAM而没有任何问题。