リンクされたOracleデータベースから選択するSQL Serverの一部のクエリでエラーが発生します。エラーは一部のSELECTステートメントでのみ発生しますが、他のステートメントでは発生しません。私は2つのサーバー上のデータを比較しようとしており、一方には存在するレコードを取得しますが他方には存在しません。リンクされたサーバー(OracleにリンクされたSQL Server)からクエリするときのSQLエラー
私はこのクエリが期待される結果を返すため、Oracleデータベース・リンクが機能知っている:
SELECT *
FROM dbo.MY_TABLE
WHERE TABLE_ID NOT IN
(
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE]
);
このクエリで、ほぼ同じです:
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE];
ここで正常に動作する別のクエリがあります上記の1つだけですが、結果を少しフィルタリングしようとすると、エラーメッセージが返されます(最後の行だけが異なります)。
SELECT *
FROM dbo.MY_TABLE
WHERE TABLE_ID NOT IN
(
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE]
)
AND TABLE_ID IN(0, 100);
ここでエラーメッセージです:
OLE DBプロバイダ "OraOLEDB.Oracle" リンクサーバー "OraDevLink" 返されたメッセージ "ORA-01403:データが見つかりません" のために。
メッセージレベル7,166、レベル16、状態2、レベル1
リンクサーバー "OraDevLink"のOLE DBプロバイダ "OraOLEDB.Oracle"から行のデータを取得できません。
私が最終的にやってみたいのは、不足しているレコード(フィルタ付き)を探すINSERT文を実行することです。
INSERT INTO [OraDevLink]..[SCHEMA].[MY_TABLE]
(TABLE_ID)
SELECT TABLE_ID
FROM dbo.MY_TABLE
WHERE TABLE_ID NOT IN
(
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE]
);
をしかし、これは同じ上記のエラーメッセージを返します:これは正しく動作
INSERT INTO [OraDevLink]..[SCHEMA].[MY_TABLE]
(TABLE_ID)
SELECT TABLE_ID
FROM dbo.MY_TABLE
WHERE DEPT_ID = 1 -- this is the only change
AND TABLE_ID NOT IN
(
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE]
);
EDIT
それは悪化します。次の2つのクエリの違いを確認できるかどうかを確認してください:
SELECT *
FROM dbo.MY_TABLE
WHERE TABLE_ID NOT IN
(
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE]
)
AND TABLE_ID IN(0);
SELECT *
FROM dbo.MY_TABLE
WHERE TABLE_ID NOT IN
(
SELECT TABLE_ID
FROM [OraDevLink]..[SCHEMA].[MY_TABLE]
)
AND TABLE_ID IN(0, 100); -- <-Hint
最初の作品です。 2番目はエラーを投げます!
Oracleデータベースにログインし、 'SELECT SUBMISSION_ID FROM AIRBRANCH.GST_SUB_SUBMISSION'を実行するとどうなりますか?そして、 'WHERE SUBMISSION_ID IN(0、100)'をクエリに追加するとどうなりますか? –
@BobJarvis期待どおりに動作します。エラーはありません。 – Doug