ストアド プロシージャ (SP) でシノニムを使用して、リンクされたデータベースで選択を実行しています。データベース名は、SP の入力に基づいて計算されます。SP はほとんどの場合正常に動作しますが、同じ SP がプログラムを介して複数回呼び出されると、次のようなエラーが発生します -
無効なオブジェクト名 Synonym_Name
アプリケーションを再起動するとエラーが修正されましたが、これはサービス呼び出しによってトリガーされたため、受け入れられません。
SPの開始時に、オブジェクトが存在するかどうかを確認し、存在する場合はドロップしてから作成しました-
IF EXISTS(select * from sys.synonyms s where name = 'Synonym_Name' )
BEGIN
DROP SYNONYM [dbo].[Synonym_Name]
END
EXEC ('CREATE SYNONYM [dbo].[Synonym_Name] FOR ' + @DB + '.[dbo].[TableName]')
この無効なオブジェクト名エラーを回避するにはどうすればよいですか?
私がすべてのフォーラムで読んだことによると、特定の ID はなく、シノニムは誰でも削除できます。テーブル名が後で複数の場所で参照されるため、状況を処理する他の方法はありますか - テーブルからの選択からの挿入、変数の割り当てなど。
この質問が既にカバーされているかどうかはわかりません。検索しましたが、何も見つかりませんでした。