使用SELECT AS别名和内部联接的TSQL上的DB2错误

时间:2010-07-04 18:48:07

标签: tsql select db2 syntax-error

我正在使用链接服务器在LINUX盒(DB2 / LINUXX8664)上的DB2数据库上编写T-SQL程序。我认为DB2是V9.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 ')

这是错误:

  

用于链接服务器“LINKEDSERVER”的OLE DB提供程序“MSDASQL”返回消息“[IBM] [CLI驱动程序] [DB2 / LINUXX8664] SQL0104N在”BER“WHERE”之后发现了意外的令牌“A”。预期的令牌可能包括:“FROM”.SQLSTATE = 42601   ”。   Msg 7350,Level 16,State 2,Line 4   无法从OLE DB提供程序“MSDASQL”获取链接服务器“LINKEDSERVER”的列信息。

2 个答案:

答案 0 :(得分:1)

= A.LOAN_NUMBER) WHERE A.FIRST_PRINCIPAL_BALANCE> 0 - 该括号看起来不合适。

答案 1 :(得分:0)

我注意到的第一件事是您有一个裸查询,这在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

你需要关闭那个引用的字符串吗?