从子查询中查询子查询时,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
的子查询,所以这真的让我感到厌烦。
尝试将2012分配给变量并在cfqueryparam中使用该变量。尝试使用cf_sql_numeric/cf_sql_integer – DG3 2012-02-07 20:51:36
cfsqltype属性不是必需的,请尝试删除它并查看是否有任何区别 – duncan 2012-02-08 09:55:26
@ user508518:完成该操作。它最初是一个变量,我将其改为常量以简化测试。 – ale 2012-02-08 13:52:48