我正在使用链接服务器在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”的列信息。
答案 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
你需要关闭那个引用的字符串吗?