【问题标题】:Mystery error with CFQUERYPARAM in sub-query子查询中 CFQUERYPARAM 的神秘错误
【发布时间】:2012-02-07 19:39:50
【问题描述】:

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

具体错误是:

[Macromedia][SequeLink JDBC Driver][ODBC Socket][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,所以这真的让我很震惊。

【问题讨论】:

  • 尝试将 2012 分配给一个变量并在 cfqueryparam 中使用该变量。使用 cf_sql_numeric/cf_sql_integer 尝试相同
  • cfsqltype 属性不是强制性的,尝试删除它,看看是否有什么不同
  • @user508518:做到了。它原本是一个变量,我把它改成了一个常量来简化测试。
  • @duncan:谢谢,但这没有任何效果。

标签: sql-server-2008 coldfusion


【解决方案1】:

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

【讨论】:

  • 我尝试了所有处理数字的方法。我将把它添加到问题中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 2017-04-20
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多