コード分析ルールの拡張性の概要
規定されたコード分析ルールはデータベース コードの Transact-SQL 設計、名前付け、パフォーマンス警告についてレポートします。 ビルトインのコード分析ルールには、自動的に検出したい特定の T-SQL 問題またはアンチパターンに対する説明が含まれない場合、カスタムのデータベース コード分析ルールを作成できます。
たとえば、「作成者のカスタム コード分析ルール」で示したように、WAITFOR DELAY ステートメントを使用しないカスタム ルールを作成できます。 カスタムのデータベース コード分析ルールを作成するには、CodeAnalysis 名前空間のクラスを使用します。
この概要では、データベース コード分析ルールのさまざまなコンポーネントの基本的なアーキテクチャについて説明します。
データベース コード分析ルールのコンポーネント
次の図では、データベース コード分析ルールのコンポーネントが処理される方法が示されます。
データベース コード分析ルール機能を使用すると、すべてのルールが読み込まれ、プロジェクトで構成した方法に従って使用されます。 詳細については、「データベース コードのスタティック分析の特定の規則を有効または無効にする」を参照してください。 拡張機能マネージャーには、作成と登録したカスタム ルール アセンブリも読み込まれます。
カスタムのコード分析ルール クラスは、SqlCodeAnalysisRule から継承します。 カスタム ルール のクラスは、ルール実行コンテキストを介して便利なオブジェクトにアクセスできます。 これらのオブジェクトには次の内容が含まれます。
- ルール自体に関するメタデータ。
- すべてのモデル要素、要素間の関係、要素のプロパティを含め、データベースのスキーマを表す
Dac.Model.TSqlModel
。 - 特定の要素を確認するルールの場合、モデル内でそのスキーマ要素を表す
Dac.Model.TSqlObject
は、コンテキストに含まれます。 - 多くのスキーマ オブジェクトにも ScriptDom 表明があり、このコンテキストを介してアクセスできます。 これは要素の AST ベースの表明であり、潜在的な構文の問題 (SelectStarExpression の存在など) を確認するときに便利です。
ルールで見つかった問題のには、Dac.CodeAnalysis.SqlRuleProblem
オブジェクトが作成されます。 この SqlRuleProblem
オブジェクトを作成する際、関連する Dac.Model.TSqlObject
(場合によっては ScriptDom 表明要素も) がコンストラクターに渡され、ソース コード ファイルの問題の場所を特定するために使用されます。 分析が完了すると、すべての問題がエラー マネージャーに渡され、エラー一覧に表示されます。
SQL プロジェクトにカスタム ルールの組み込み
Microsoft.Build.Sql SDK スタイルの SQL プロジェクトを使用すると、ルールを含むパッケージ参照を追加することにより、カスタム コード分析ルールをプロジェクトに含めます。