Тайная ошибка с CFQUERYPARAM в подзапросе - PullRequest
1 голос
/ 07 февраля 2012

Я получаю обычную ошибку от SQL Server для запроса с подзапросом, где в подзапросе есть CFQUERYPARAM.

Конкретная ошибка:

[Macromedia] [Драйвер SequeLink JDBC] [Разъем ODBC] [Microsoft] [Собственный клиент 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>

Столбец 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

К сожалению, из-зав других случаях я не могу использовать драйверы SQL Server, которые поставляются с ColdFusion, но должен использовать мост ODBC.База данных определяется как системный DSN.

Является ли мост ODBC причиной здесь?У меня было CFQUERYPARAM в подзапросах по прошлым проектам, так что это действительно меня бросает.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

Как я и подозревал, ключом является мост ODBC.Я настроил другой источник данных с помощью драйвера SQL Server и смог без проблем использовать CFQUERYPARAM в подзапросе.

0 голосов
/ 07 февраля 2012

Вы уже пробовали другой тип cfsql? Я хотел бы попробовать cf_sql_integer, а также cf_sql_varchar и посмотреть, работает ли какой-либо из них. Я никогда не использовал _decimal; Однако я использовал _float.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...