私のMicrosoftSQL Serverには、別のSQLServerにリンクされたサーバーがあります。リモートテーブルを削除し(切り捨ては機能しません)、データを挿入する簡単なクエリがあります。
このクエリは、SSMSで実行されている場合は正常に機能します。ただし、スケジュールどおりに実行する必要があるため、ESTとしてdtsx
に追加します。問題は、このdtsx
を実行すると、SSDTで手動で実行する場合でも、SQL Serverエージェントで自動的にスケジュールする場合でも、次のメッセージで失敗することです。
sys.servers`でサーバー '-----'が見つかりませんでした。
これは非常に奇妙です。もちろん、サーバーはsys.servers
にあり、リンクサーバーは機能しています。私が言ったように、SSMSで実行するとまったく同じクエリが機能します。この不一致の原因が何であるかを想像することすらできません。他のリンクサーバーは正常に動作します。
誰かがそれを引き起こしている可能性があり、私が手がかりを探すことができるものを推測できますか?このエラーをグーグルで検索すると、リンクサーバーを構成する方法を説明するだけですが、すでに存在しています。
リンクされたオブジェクト名をクエリと一緒に共有できますか?時々問題はFROMの部分にあります。このエラーが発生する可能性のある状況はたくさんあり、それらの多くはStackOverflowでカバーされています。ただし、共有サーバーで特に発生する可能性のある1つのケースは、データベース名にピリオド(ドット)が含まれていることです。たとえば、その名前がmysite.com_DBの場合。これにより、自動的に問題が発生します。
データベースの名前を変更できない場合の解決策は、DB名を角かっこで囲むことです。たとえば、次のようになります。
mysite.com_DB.Table_name
になります:
[mysite.com_DB].Table_name
この問題の原因を見つけることができませんでした。別のMSSQLインスタンスで試してみたところ、そこから機能しました。