1

私は、データが多数のクライアント データベースに存在し、SQL を介して 1 つずつ中央のデータ リポジトリに取り込まれる環境で作業しています。

テスト プロセスを自動化するために、ユーザー指定のクライアント データベースのデータをバックアップ、パージ、および再抽出する、非常に優れた合理化されたプッシュ ボタン スクリプトを作成しました。いくつかのパラメーターを変更して実行を押すだけで機能します。スクリプトはセミテクニカル スタッフに引き継がれるため、シンプルである必要があります。

しかし、私には1つの問題があります。このスクリプトは、リンク サーバーを介してリモート テーブルにマップする、動的に生成された同義語を多用します。これらのテーブルのいくつかは、スクリプトによって作成されたバックアップ テーブルです。

私が発見したのは、バックアップのシノニムがまだ中央サーバーに存在している間に、スクリプトで作成されたバックアップ テーブルの 1 つが削除された (またはデータベース コピーが夜間に更新された) 場合、スクリプトは次のエラーで失敗することです。

リンク サーバー "[linkedservername]" の OLE DB プロバイダー "SQLNCLI10" には、テーブル ""[database_name]"."[schema_name]"."[backup_table_name]"" が含まれていません。テーブルが存在しないか、現在のユーザーがそのテーブルに対する権限を持っていません。

コンパイル時に、SQL Server は、スクリプトで参照されている各シノニムの背後で、有効な宛先オブジェクト (テーブル) をチェックします。ストアド プロシージャを作成するためにデータベース オブジェクトが存在する必要がなくなったのと同様に、SQL Server がこれを行うのを防ぐ方法はありますか?

スクリプトの最後に同義語をドロップしてデバッグ/調査を容易にするかどうかを決定するフラグがあることに注意してください。そのため、これらの同義語がサーバーに残る場合があります。ただし、スクリプトはすべてのシノニムを作成する前に先制的に削除し、残りのシノニムが誤って使用されないようにします。

しかし、エラーはスクリプトのコンパイル時に発生するため、古いシノニムを削除する機会はありません。実際、スクリプトの 1 行も実行されません。したがって、スクリプトの冒頭にあるすべてのシノニムを削除できるわけではありません。

同義語のコンパイル チェックをオフにする方法はありますか? これを、ユーザーの介入やトラブルシューティングを必要としない、すべてを実行する単一のスクリプトにしたいと考えています。

4

0 に答える 0