1

リンク サーバー上のデータベースにクエリを実行する必要がありますが、残念ながらデータベース名にピリオドが含まれています。

これは失敗します。

select top 10 * 
FROM [LINKED_SERVER].[DATABASE_NAME.1].dbo.[TABLE_NAME] 

このエラーで:

OLE DB エラー トレース [非インターフェイス エラー: オブジェクトに columnProviderName='SQLOLEDB', Query="DATABASE_NAME.1"."dbo"."TABLE_NAME"'' がないため、OLE DB プロバイダーはオブジェクトを処理できません]。
メッセージ 7357、レベル 16、状態 2、行 2
オブジェクト '"DATABASE_NAME.1"."dbo"."TABLE_NAME"' を処理できませんでした。OLE DB プロバイダー 'SQLOLEDB' は、オブジェクトに列がないことを示しています。

データベース名にピリオドを付けずに同じリンク サーバーに接続すると機能します。

select top 10 * 
FROM [LINKED_SERVER].[DATABASE_NAME].dbo.[TABLE_NAME] 

私の手に負えない既存のデータベース名への参照が多数あるため、データベースの名前を永続的に変更することを回避する解決策を見つけたいと考えています。

シノニムやその他のエイリアスを作成したり、これを機能させる別の方法を見つけたりしたいと考えています。

4

2 に答える 2

0

リンクされたサーバー経由でアクセスされるデータベース名のピリオドは、角かっこ [] でエスケープされている場合は完全に受け入れられます。エラーは別のものでなければなりません。

これは、テスト リグで確認できます。

http://www.heavencore.co.uk/filehub/uploaded/LinkedServerWithPeriod.jpg

リンクサーバーに古いSQLOLEDBプロバイダーを使用しているという考えがありましたが、SQLNCLI10代わりに使用してみましたか?

于 2013-01-11T00:32:24.573 に答える