2012-02-07 10 views
1

의 CFQUERYPARAM과 관련된 미스터리 오류 하위 쿼리가있는 쿼리에서 SQL Server의 일반적인 오류가 발생합니다 (하위 쿼리에 CFQUERYPARAM이있는 경우).하위 쿼리

특정 오류 :

[매크로 미디어] [SequeLink JDBC 드라이버] [ODBC 소켓] [마이크로 소프트] [SQL 서버 네이티브 클라이언트 10.0] 구문 오류, 권한 위반 또는 기타 비특이적 오류

은 내가이 쿼리에 그것을 아래로 증류 할 수있었습니다 회계 연도 열이 decimal(4,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> 

(간체). 나는 숫자 (cf_sql_integer, cf_sql_numeric, cf_sql_real, cf_sql_float 등)를 처리하는 모든 cfsqltype을 시도했으며 모두 동일한 결과를 제공합니다.

하위 쿼리의 CFQUERYPARAM을 바로 값 (예 : 2012)으로 변경하면 쿼리가 올바르게 작동합니다. 분명히 내가 크게 CFQUERYPARAM를 사용하는 것이 좋습니다 것입니다.

  • ColdFusion에서 9.0
  • 2008

SQL 서버 불행하게도, 다른 상황에 내가 ColdFusion과 함께 제공되는 SQL 서버 드라이버를 사용할 수 있지만, ODBC 브리지를 사용해야 때문에. 데이터베이스는 시스템 DSN으로 정의됩니다.

여기에서 ODBC 브리지가 원인입니까? 나는 이것이 과거의 프로젝트에서 서브 쿼리로 CFQUERYPARAM을 가졌기 때문에 이것이 정말로 나를 던지고있다.

+0

변수에 2012를 지정하고 해당 변수를 cfqueryparam에 사용하십시오. cf_sql_numeric/cf_sql_integer를 사용하여 동일하게 시도하십시오 – DG3

+0

cfsqltype 속성은 필수는 아니지만이를 제거하고 차이가 있는지 확인하십시오. – duncan

+0

@ user508518 : 완료했습니다. 그것은 원래 변수 였고 테스트를 단순화하기 위해 그것을 상수로 변경했습니다. – ale

답변

0

내가 생각하기에 키가 ODBC 브리지 인 것 같습니다. SQL Server 드라이버를 사용하여 다른 데이터 소스를 설정했는데 아무 문제없이 하위 쿼리에서 CFQUERYPARAM을 사용할 수있었습니다.

0

아직 다른 cfsqltype을 사용해 보셨습니까? 나는 cf_sql_integer와 cf_sql_varchar를 시도해보고 그 중 하나가 작동하는지 봅니다. 나는 _decimal을 사용한 적이 없다. 그러나 _float를 사용했습니다.

+0

숫자를 다루는 모든 것을 시도했습니다. 나는 그것을 질문에 추가 할 것이다. – ale