2

我有一个从 SQL Server 2008 R2 到使用 OLE DB 提供程序“IBMDA400”的 DB2 数据库 (V4R5M0) 的链接服务器

链接服务器详细信息

EXEC master.dbo.sp_addlinkedserver 
     @server = N'JTEST', @srvproduct=N'IBM OLE DB Provider for DB2', 
     @provider=N'IBMDA400', @datasrc=N'TestName'

这工作正常:

SELECT * FROM OPENQUERY(JTEST, 'Select * from QSYS2.SYSCOLUMNS')

但是以下语句会产生错误:

SELECT * FROM OPENQUERY(JTEST, 'Select * from QSYS2.SYSCOLUMNS FETCH FIRST 10 ROWS ONLY')

错误

链接服务器“JTEST”的 LE DB 提供程序“IBMDA400”返回消息“SQL0199:不期望关键字 FETCH。有效标记:FOR WITH ORDER UNION OPTIMIZE。原因……:此处不期望关键字 FETCH。语法错误是在关键字 FETCH 处检测到。有效标记的部分列表是 FOR WITH ORDER UNION OPTIMIZE。此列表假定语句在意外关键字之前是正确的。错误可能在语句中较早,但语句的语法似乎是有效的至此,recovery...:检查指定关键字区域的SQL语句,可能缺少冒号或SQL定界符,SQL要求保留字作为名称时要进行定界,更正SQL语句并再次尝试请求。”。消息 7321,级别 16,状态 2,

我认为这是因为这个版本的 DB2 不支持 FETCH FIRST X ROWS ONLY?但是有没有办法在这个版本中只选择有限的记录集?

4

2 回答 2

1

FETCH FIRST 不需要 ORDER BY 吗?否则,它会得到哪 10 行?

据我在 DB2 SQL 文档中看到的,当前和旧版本都支持它,尽管它没有说明(也不清楚)ORDER BY 是否是 FETCH FIRST 的强制要求

于 2013-05-31T13:27:09.357 回答
0

Fetch first 子句仅适用于 V5R1 OS400 版本。V4R5M0 太旧了

有一个解决方法: select * from (
SELECT syscolumns.* , row_number() over() as nre FROM syscolumns
ORDER BY COLUMN_NAME ) 作为
nre<10 的列

你可以试试


德佩

于 2013-06-01T19:52:42.723 回答