2

現在、参照整合性はほとんどなく、自己結合する多数のテーブルがあります (実際には、結合された個別のテーブルまたはビューとして表す方がよいでしょう)。

これらのテーブルが相互にどのように関連しているかは、スキーマで明示的にではなく、ストアド プロシージャのロジックで暗黙的に認識されます。これを変更することを検討しています。

最初のステップは、暗黙の関係を実際に理解し、それらを文書化することです。

だから私の質問は...

すべてのストアド プロシージャに注目する以外に、その暗黙の情報を抽出する最善の方法は何ですか。独自の SQL を記述してシステム テーブルに問い合わせたり、SQL-DMO モデルを利用したり、実際にはコンピュータがより多くの作業を行い、私がより少ない作業を行えるようにするあらゆるツールを検討します。

4

3 に答える 3

1

関係がSPの結合によってのみ識別される場合、それを自動化することはあまり運がありません。

プロファイラーを使用してクエリをキャプチャし、最も頻繁な結合を最初に見つけることは価値があるかもしれません。

于 2009-12-03T11:53:01.973 に答える
0

リファクタリングに関して言えば、私は昔ながらのやり方です。

  1. あなたが持っているものを文書化し、ビジュアルツールを使用してください。
  2. このデータベースが捉えるビジネスモデルを、書面で説明してください。
  3. 説明名詞と既存のスキーマからエンティティを選択します。
  4. 新しい ER モデルを作成します。その間、ビジネスに相談してください。
  5. ER に基づいて新しい DB を作成する
  6. ETL データを新しいデータベースに渡してテストします。
于 2009-12-03T15:21:37.910 に答える
0

SPが依存している列とテーブルを見つけるために使用できますsys.sql_dependencies(SPで実行しない場合に役立ちますSELECT *)。これにより、少なくとも次の候補の一覧を取得できます。

referenced_major_id == the OBJECT_ID of the table
referenced_minor_id == the column id: COLUMNPROPERTY(referenced_major_id,
                                                       COLUMN_NAME,
                                                       'ColumnId')

sp_refreshsqlmoduleそれが機能するためには、依存関係が最新であることを確認するために使用する必要がある場合があります。つまり、ビューを変更する場合は、sp_refreshsqlmoduleスキーマにバインドされていない各モジュールで変更する必要があります (明らかに、スキーマにバインドされたモジュールでは、そもそも基になる変更を許可していませんが、スキーマを呼び出すとエラーが発生しますsp_refreshsqlmodule-そのビューに依存するバインドされたオブジェクト)。sp_refreshsqlmoduleこれらのオブジェクトを呼び出すことで、これを自動化できます。

SELECT *
FROM    INFORMATION_SCHEMA.ROUTINES
WHERE   OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.'
                                 + QUOTENAME(ROUTINE_NAME)),
                       N'IsSchemaBound') IS NULL
        OR OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.'
                                    + QUOTENAME(ROUTINE_NAME)),
                          N'IsSchemaBound') = 0
于 2009-12-03T15:31:29.687 に答える