3

比較的新しいデータベースプロジェクトがあり、過去6か月ほどにわたってビューとストアドプロシージャを作成してきました。

  • データベースは機能します
  • ビューは機能します
  • ストアドプロシージャは機能します

ただし、このプロジェクトが開始されてから、プロジェクトの一般的な範囲は大幅に拡大し、現在、一部のテーブル名とフィールド名は少しベースから外れています。

たとえば、データベースのメインテーブルはと呼ばれますSheetMetalRequestが、プロジェクトは実際の板金要求が現在のところにまで成長しましたが、列挙可能なタイプの要求の1つです。したがって、この表の名前は、プロジェクトに参加する人々を誤解させるものです。

このメインテーブルに加えて、他のテーブルにも変更が必要なさまざまな列があります(SheetMetalRequestIDたとえば、考えてみてください)。

この変更を行う際の問題は、現在このデータベースの一部となっている10個の異なるビューと30個のストアドプロシージャです。当然のことながら、何かが変更され、すべてが変更されていない場合、稼働中の実動前データベースが実行状態に戻るまでに数時間かかる可能性があります。

Visual Studioに存在するようなリファクタリング機能あれば、それは素晴らしいことです。

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition')

productversion | productlevel | edition
10.0.1600.22   | RTM          | Standard Edition (64-bit)
4

2 に答える 2

3

SSDTのようなツールが何らかの理由で機能しない場合は、自分のペースで手動でこれを行うことができます。「ボタンを1つクリックして家に帰る」アプローチは、実際にはあなたが望むものではない場合があります。

同義語の導入から始めることができます。

CREATE SYNONYM dbo.Requests FOR dbo.SheetMetalRequest;

これで、コードを分割してリファクタリングし、各参照を新しい名前にポイントすることができます。すべての参照をキャプチャしたと確信している場合(SSDTのようなツールを使用しても、データベースの外部のコード、または現在のデータベース内の動的SQLのコードを表示できないため、これは簡単ではありません)、同義語を削除して、テーブルの名前を変更できます。

BEGIN TRANSACTION;
    DROP SYNONYM dbo.Requests;
    EXEC sp_rename 'dbo.SheetMetalRequest', 'Requests', 'OBJECT';
COMMIT TRANSACTION

sp_refreshsqlmodule(依存関係を完全に修正したことを確認するために、すべてのモジュールをループ内で2回更新することもできます。)

これにより、コードのさまざまな部分(ビュー/ストアドプロシージャだけでなく、中間層クラス、さらにはフロントエンドのもの)を更新して正しい名前を参照できるようになり、一度にすべてを実行する必要がなくなります。

于 2012-05-21T21:34:42.673 に答える
1

Red GateのSQLプロンプトには、「スマートな名前変更」機能があります。これは、探しているもののように聞こえます。これにより、オブジェクトの名前が変更されるだけでなく、他のオブジェクトでのオブジェクトへの参照も変更されます。これは私が働いている会社の商用ツールですが、14日間の完全に機能する評価期間があります。

http://www.red-gate.com/products/sql-development/sql-prompt/featuresを参照してください

于 2012-05-28T07:53:54.513 に答える