在带有子查询的查询上,我从Server获得了一个常见的错误,在子查询中有一个CFQUERYPARAM。
具体错误是:
MacromediaODBC SocketSQL 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>FY列被定义为decimal(4,0)。我试过每一个处理数字的cfsqltype (cf_sql_integer、cf_sql_numeric、cf_sql_real、cf_sql_float等)。结果都是一样的。
如果我将子查询中的CFQUERYPARAM更改为一个简单的值(例如,2012年),则查询工作正常。显然,非常喜欢而不是CFQUERYPARAM。
不幸的是,由于其他情况,我不能使用ColdFusion附带的Server驱动程序,但必须使用ODBC桥。数据库被定义为系统DSN。
ODBC桥是这里的原因吗?我在过去的项目中有过CFQUERYPARAM的子查询,所以这真的让我很不爽。
发布于 2012-02-08 14:30:22
正如我所怀疑的,关键似乎是ODBC桥。我使用Server驱动程序设置了一个不同的数据源,并且能够在子查询中毫无问题地使用CFQUERYPARAM。
发布于 2012-02-07 19:56:16
你试过不同的cfsqltype类型了吗?我会尝试cf_sql_integer和cf_sql_varchar,看看这两种方法是否有效。我从未使用过_decimal,但是我使用过_float。
https://stackoverflow.com/questions/9182712
复制相似问题