0

「DB2OurDatabase」という名前の DB2 データベースへのリンク サーバー接続を作成したローカル SQL Server インスタンスがあります。リンク サーバー接続を作成する際に、さまざまなクエリ ツールやアプリケーションで "[SchemaX].[TableX]." をクエリするために使用する UID と PWD を指定しました。

リンク サーバーの作成に成功したようです: 「DB2OurDatabase」という名前のリンク サーバー ノード オブジェクトが SSMS のリンク サーバー ノードの下に作成され、それを展開すると、データベース内のテーブルが表示されます。

[SchemaX].[TableX] テーブルを右クリックして選択すると、

"Script Table as => Select To ==> New Window" というテキストで新しいクエリ ウィンドウが開かれました。

--[DB2OurDatabase].[DataCenterCityName2_DB2OurDatabase].[SchemaX].[TableX] 
contains no columns that can be selected or the current user does not have permissions on that object.
GO

データベース内のテーブル名を表示できるリンク サーバーを作成できた方法がわかりませんが、同じ資格情報を使用しているにもかかわらず、テーブルをクエリする権限がないように見えることに遭遇したようです。たとえば、Squirell SQL クエリ ツールでテーブルをクエリするために使用したことがあります。

SSMSで、これを実行しようとしました

SELECT * 
FROM [DB2OurDatabase].[DataCenterCityName2_DB2OurDatabase].[SchemaX].[TableX] 

エラー:

メッセージ 7314、レベル 16、状態 1、行 1
リンク サーバー "DB2OurDatabase]" の OLE DB プロバイダー "IBMDADB2" には、テーブル ""DataCenterCityName2_DB2OurDatabase"."SchemaX"."TableX"" が含まれていません。テーブルが存在しないか、現在のユーザーがそのテーブルに対する権限を持っていません。

完全修飾テーブル名に [DataCenterCityName2_DB2OurDatabase] が含まれていることに少し驚きました。これは、Linked Server 接続をセットアップしたときにこれを指定しなかったためです。ただし、DataCenter 都市の名前は正しかったので、Linkedサーバー接続に成功しました。

それにもかかわらず、完全修飾テーブル名のこのレベルの削除も実行しようとしました。

SELECT * 
FROM [DB2OurDatabase].[SchemaX].[TableX] 

このエラーが発生しました。

メッセージ 208、レベル 16、状態 1、行 1
無効なオブジェクト名 'DB2OurDatabase.[SchemaX].[TableX]'。

DB2 データベース内のテーブルを照会できるようにする DB2 リンク サーバーを作成するには、何をする必要がありますか? リンク サーバーのプロパティは次のとおりです。

ここに画像の説明を入力

4

3 に答える 3

0

明らかに、オブジェクト名を置き換えることによって実際のコマンドを変更したため、確かなことはわかりませんが、問題は、引用符で囲まれた識別子 (これらの角括弧) の使用によって引き起こされる可能性があり、これにより、本質的にオブジェクト名の大文字と小文字が区別されます。DB2 は、引用符で囲まれていない限り、デフォルトでオブジェクト (テーブル、スキーマ) 名を大文字で作成します。create table MySchema.MyTable...(unquoted) は DB2 側で table を作成し、MYSCHEMA.MYTABLE後で SSMS から[MySchema].[MyTable](引用符付きの識別子を使用して) 参照すると、明らかに失敗します。

于 2013-08-22T18:47:14.937 に答える