【发布时间】: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