我在带有子查询的查询中从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附带的SQL Server驱动程序,但必须使用ODBC桥。数据库定义为系统DSN。
ODBC桥是否是原因?我在过去的项目中的子查询中有CFQUERYPARAM
,所以这真的让我失望。
答案 0 :(得分:0)
你尝试过不同的cfsqltype吗?我会尝试cf_sql_integer和cf_sql_varchar,看看是否有任何工作。我从来没用过_decimal;不过,我使用了_float。
答案 1 :(得分:0)
我怀疑,密钥似乎是ODBC桥。我使用SQL Server驱动程序设置了不同的数据源,并且我能够在子查询中使用CFQUERYPARAM
而没有任何问题。