2

OLE DB プロバイダー「IBMDA400」を使用して、SQL Server 2008 R2 から 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。原因 . . . . : The keyword FETCH was not expected here. A syntax error wasキーワード FETCH で検出されました。有効なトークンの部分的なリストは、FOR WITH ORDER UNION OPTIMIZE です。このリストは、ステートメントが予期しないキーワードまで正しいことを前提としています。エラーはステートメントの前にある可能性がありますが、ステートメントの構文は有効なようですここまで. 回復. . . : 指定されたキーワードの領域の SQL ステートメントを調べます. コロンまたは SQL 区切り文字が欠落している可能性があります. SQL では、名前として使用される予約語を区切る必要があります. SQL ステートメントを修正してください.リクエストを再試行してください。」メッセージ 7321、レベル 16、状態 2、

このバージョンの DB2 では FETCH FIRST X ROWS ONLY がサポートされていないためだと思いますか? しかし、このバージョンで限られたレコード セットのみを選択する方法はありますか?

4

2 に答える 2

1

FETCH FIRST は ORDER BY を必要としませんか? そうでなければ、どの 10 行になるでしょうか?

DB2 SQL ドキュメントで確認できる限り、現在および古いバージョンでサポートされていますが、FETCH FIRST で ORDER BY が必須であるかどうかは明記されていません (明確ではありません)。

于 2013-05-31T13:27:09.357 に答える
0

V5R1 OS400 バージョンからのみ、最初の句をフェッチします。V4R5M0 は古すぎます

回避策があります: select * from (
SELECT syscolumns.* , row_number() over() as nre FROM syscolumns
ORDER BY COLUMN_NAME ) as columns
where nre<10

あなたはそれを試すことができます


DEペ

于 2013-06-01T19:52:42.723 に答える