SQL サーバー構造のリファクタリング

SQL サーバー構造のリファクタリング

多くの場合、C# コードでは変数の名前を変更することができ、その変数へのすべての参照も変更されます。

SQL サーバーのオブジェクトでこれを行うことができる同様の機能はありますか? 一部のテーブル、列、ストアド プロシージャの名前を変更する必要がありますが、もちろんすべてを機能させ続けたいと考えています。

答え1

Q: これを行うためのアプリや機能はありますか?

はい。

Q: 使用すべきでしょうか?

おそらくそうではありません。SQL の問題は、オブジェクト名への参照をすべてキャッチするのが非常に難しいことです。

一例として、動的 SQL があります。これは、文字列を構築し、その文字列をクエリとして実行する手法です。ストアド プロシージャには次のようなコードが含まれる場合があります。

DECLARE @StringToExecute
SET @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'
EXEC (@StringToExecute);

dbo.MyTableName を別の名前に変更したい場合は、ストアド プロシージャとアプリ コード内の文字列を確認する必要があります。これは、次のコードも有効なため、非常に困難です。

DECLARE @StringToExecute
SET @StringToExecute = 'USE Database1;'
SET @StringToExecute = @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'
EXEC (@StringToExecute);
SET @StringToExecute = 'USE Database2;'
SET @StringToExecute = @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'

これにより、2 つの異なるデータベース内の 2 つの異なる MyTableName に対して 2 つの異なるクエリが構築されます。

もう 1 つの例は、リンク サーバー クエリです。他の SQL Server は、リンク サーバー、シノニム、ビューなどを使用して設定され、既存のオブジェクトをクエリできます。

したがって、オブジェクト名の変更とテーブルのリファクタリングは、実際には次の場合にのみ実行できます。

  • あなたのアプリはまだ新しい
  • クエリを非常に厳密に制御できます
  • どこから問い合わせが来るかはご存じでしょう

答え2

Linq to SQL について話していて、Visual Studio で LINQ オブジェクト定義を変更する場合、これらを更新する一般的な方法は、デザイナーでそれらを削除して再度追加し、参照を見つけて新しい名前に更新することです。DI とリポジトリ パターンのようなものを使用する場合、参照がすべて 1 つの領域にあり、コード全体に分散していないため、これは非常に簡単です。

答え3

何かを買いたいなら、レッドゲートあなたにぴったりのものがあります。

答え4

試してみることをお勧めしますSQL 完了 テーブル、列、一時テーブルと列、ビュー、ストアド プロシージャ、および関数に意味のあるわかりやすい名前を付けることで、コードの読みやすさを向上させることができます。SQL Complete は、名前が変更されたオブジェクトへのすべての参照を自動的に修正します。

名前変更機能を使用すると、ローカル変数や SQLCMD 変数の名前を数秒で変更することもできます。名前変更ダイアログ ウィンドウの便利なツリー ビューでコードの変更をプレビューします。

関連情報