2012-02-07 85 views
1

从子查询中查询子查询时,SQL Server发生通常的错误,其中子查询中有CFQUERYPARAM在子查询中使用CFQUERYPARAM的神秘错误

特定的错误是:

[Macromedia公司] [SequeLink JDBC驱动程序] [ODBC插座] [微软] [SQL Server本机客户端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> 

年财政年度列被定义为decimal(4,0)。我试过每个处理数字的文件(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的子查询,所以这真的让我感到厌烦。

+0

尝试将2012分配给变量并在cfqueryparam中使用该变量。尝试使用cf_sql_numeric/cf_sql_integer – DG3 2012-02-07 20:51:36

+0

cfsqltype属性不是必需的,请尝试删除它并查看是否有任何区别 – duncan 2012-02-08 09:55:26

+0

@ user508518:完成该操作。它最初是一个变量,我将其改为常量以简化测试。 – ale 2012-02-08 13:52:48

回答

0

正如我所怀疑的,关键似乎是ODBC的桥梁。我使用SQL Server驱动程序设置了不同的数据源,我可以毫不费力地在子查询中使用CFQUERYPARAM

0

您是否尝试过不同的cfsqltype呢?我会尝试cf_sql_integer和cf_sql_varchar,看看其中的任何一个工作。我从来没有使用_decimal;但是,我已经使用了_float。

+0

我试过所有处理过号码的人。我会在这个问题上加上这一点。 – ale 2012-02-07 20:01:51