【发布时间】:2014-01-10 13:49:38
【问题描述】:
我有几个在应用程序中使用的 SQL 语句。我注意到当某些会员号返回时,例如012345,它们返回为12345。此数字用于协助文件命名约定,并且根据某些其他标准,需要采用 6 位格式才能正确处理文件。
谁能帮我解决这个问题?截断来自查询 IBM AS400 系统。有人建议使用 DIGITS( ) 函数,但我还没有让它与下面的示例查询一起使用:
SELECT DISTINCT DIGITS(a.memno),
a.name,
a.addr1,
a.addr2,
a.city,
a.state,
a.zip,
a.sex,
a.lname,
a.ssan,
b.addr1 as old_addr1,
b.addr2 as old_addr2,
b.city as old_city,
b.state as old_state,
b.zip as old_zip,
'P' as SYS
FROM Lib1.Table1 a, Lib1.Table2 b
WHERE a.memno = b.memno and
b.groupid = 'P2' and
b.type = 'B' and
b.rcchg <> 'N' and
b.datec = 20140107
AND (UPPER(a.addr1) <> UPPER(b.addr1) or UPPER(a.addr2) <> UPPER(b.addr2) or UPPER(a.city) <> UPPER(b.city) or UPPER(a.state) <> UPPER(b.state) or UPPER(a.zip) <> UPPER(b.zip))
UNION SELECT DISTINCT
DIGITS(a.memno),
a.name,
a.addr1,
a.addr2,
a.city,
a.state,
a.zip,
a.sex,
a.lname,
a.ssan,
b.addr1 as old_addr1,
b.addr2 as old_addr2,
b.city as old_city,
b.state as old_state,
b.zip as old_zip,
'N' as SYS
FROM Lib2.Table1 a, Lib2.Table2 b
WHERE a.memno = b.memno and
b.groupid = 'N2' and
b.type = 'B' and
b.rcchg <> 'N' and
b.datec = 20140107 AND (UPPER(a.addr1) <> UPPER(b.addr1) or UPPER(a.addr2) <> UPPER(b.addr2) or UPPER(a.city) <> UPPER(b.city) or UPPER(a.state) <> UPPER(b.state) or UPPER(a.zip) <> UPPER(b.zip))
ORDER BY sys, memno asc
当我在 AS400 上运行此查询时,它的工作方式完全符合预期。但是,当我在 Visual Studio 2012 的服务器资源管理器中通过数据连接运行它时,我收到:
Error Source: CWBODBC.DLL
Error Message: ERROR [Hy000] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0208 - ORDER BY column MEMNO or expression not in result table.
此查询是通过我的 C# 应用程序使用 ODBC 连接上的 ODBC 命令发送的。
【问题讨论】:
标签: c# sql odbc database-connection ibm-midrange