Ошибка DB2 в TSQL с использованием псевдонима SELECT AS и внутреннего соединения - PullRequest
1 голос
/ 04 июля 2010

Я пишу программу T-SQL через базу данных DB2 на коробке LINUX (DB2 / LINUXX8664), используя связанный сервер. Я думаю, что DB2 Версия 9.5.3, но не уверен. Я получаю сообщение об ошибке, которое, по моему мнению, является проблемой DB2, поскольку синтаксис в T-SQL проверяется нормально. Это код:

IF(SELECT(OBJECT_ID('TEMPDB..#TempFile))) IS NOT NULL DROP TABLE #TempFile

SELECT        *

INTO  #TempFile
FROM  OPENQUERY(LinkedServer, '

SELECT  F.LOAN_NUMBER,

   (SELECT 
    SUM(EXP_CHILD_CARE_AMOUNT) + SUM(EXP_FOOD_AMOUNT) + 
    SUM(EXP_LIFE_INSURANCE_AMOUNT) + SUM(EXP_TRANSPORTATION_AMOUNT) + SUM(EXP_TUITION_AMOUNT)+
    SUM(EXP_USER_1_AMOUNT) + SUM(EXP_USER_2_AMOUNT) + SUM(EXP_USER_3_AMOUNT) + 
    SUM(EXP_UTILITIES_AMOUNT)
    FROM FINANCIAL F)
       AS ExpenseTotal,

    (SELECT
     SUM(MORTGAGOR_NET_PAY_AMOUNT) + SUM(MORTGAGOR_OTHER_INCOME_AMOUNT) AS IncomeTotal 
     FROM FINANCIAL F   
      INNER JOIN BDE.LOAN_V a ON F.LOAN_NUMBER = A.LOAN_NUMBER)
     WHERE A.FIRST_PRINCIPAL_BALANCE> 0
        GROUP BY F.LOAN_NUMBER 
        ORDER BY F.LOAN_NUMBER,   


FETCH ONLY WITH UR ')

Вот ошибка:

Поставщик OLE DB "MSDASQL" для связанного сервера "LINKEDSERVER" вернул сообщение "[IBM] [Драйвер CLI] [DB2 / LINUXX8664] SQL0104N Неожиданный токен" A "был найден после" BER) WHERE ". Ожидаемые токены могут включать в себя : "ОТ". SQLSTATE = 42601 ». Msg 7350, уровень 16, состояние 2, строка 4 Не удалось получить информацию о столбце от поставщика OLE DB "MSDASQL" для связанного сервера "LINKEDSERVER".

Ответы [ 2 ]

1 голос
/ 04 июля 2010

= A.LOAN_NUMBER) WHERE A.FIRST_PRINCIPAL_BALANCE> 0 - этот кронштейн выглядит неуместным.

0 голосов
/ 04 июля 2010

Первое, что я заметил, это то, что у вас есть голый запрос, что не редкость в Microsoft SQL Server.Упрощенная версия вашего связанного запроса выглядит следующим образом:

SELECT (subquery), (subquery) WHERE ...conditions...

В DB2 в каждом запросе должно быть предложение FROM.Microsoft и некоторые другие поставщики SQL разрешают SELECT без предложения FROM, но это не стандартный SQL.В этом случае DB2 соответствует стандарту.


Второе, что я заметил:

IF(SELECT(OBJECT_ID('TEMPDB..#TempFile))) IS NOT NULL DROP TABLE #TempFile

Вам нужно закрыть эту строку в кавычках?

...