次の方法で共有


チュートリアル : 既存のデータベースに対する Transact-SQL コードの分析

データベース スキーマをデータベース プロジェクトにインポートし、コードを一連の規則に照らして分析することで、データベース スキーマの Transact-SQL (T-SQL) コードの品質を高めることができます。 たとえば、自分で開発したのではなく、品質が確認されていないスキーマを使用する必要がある場合に、スキーマに存在するエラーを見つけることができます。 詳細については、「スタティック分析によるデータベース コードの改善」を参照してください。

データベース コードを分析する前に、既存のデータベースのスキーマをデータベース プロジェクトにあらかじめインポートしておく必要があります。 このプロジェクトに含まれているコードの品質レベルは不明です。 スタティック コード分析に使用できるすべての規則を適用して、Transact-SQL (T-SQL) コードを分析する必要があります。 後で、チーム内で一部の規則を無効にすることも考えられますが、この最初の評価では、データベース コードに潜在するすべての問題を検出する必要があります。 警告と、警告の原因となったコードを確認します。 警告を解決し、それ以上警告が表示されないように抑制して、データベース プロジェクトを再分析します。

前提条件

このチュートリアルを実行する前に、「チュートリアル : 既存のデータベース スキーマのバージョン管理」を実行して、 MyNorthwind という名前のデータベース プロジェクトを含むソリューションを作成する必要があります。

データベース プロジェクトを分析するための規則を構成するには

  1. Visual Studio で、MyNorthwind ソリューションを開きます。

  2. スキーマ ビューで、データベース プロジェクトのノードが展開されていない場合は、展開します。

  3. [データ] メニューの [スタティック コード分析] をポイントし、[構成] をクリックします。

    データベース プロジェクトのコード分析プロパティが表示されます。

  4. [ルール] の一覧で、[デザイン]、[名前指定]、および [パフォーマンス] の各ノードを展開して、T-SQL コードの分析に使用できるすべての規則を表示します。

  5. すべての規則のチェック ボックスがオンになっていることを確認します。

    規則のカテゴリ (デザインなど) のチェック ボックスをオンまたはオフにすると、そのカテゴリ内の各規則のチェック ボックスをオンまたはオフにできます。

    Dd193414.alert_note(ja-jp,VS.90).gifメモ :

    規則の [警告をエラーとして扱う] チェック ボックスをオンにすることで、その規則を警告ではなくエラーとして扱うことができます。

  6. [ファイル] メニューの [すべてを保存] をクリックします。

    次に、データベース プロジェクトの T-SQL コードを分析します。 このチュートリアルでは、分析を手動で開始しますが、データベース プロジェクトのビルドが正常に完了するたびに分析が開始するように構成できます。 詳細については、「方法 : データベース コードのスタティック分析を有効/無効にする」を参照してください。

データベース プロジェクトを分析するには

  • [データ] メニューの [スタティック コード分析] をポイントし、[実行] をクリックします。

    データベース プロジェクトの T-SQL コードが分析され、警告が [エラー一覧] に表示されます。 [エラー一覧] が表示されない場合は、[表示] メニューを開き、[エラー一覧] をクリックします。

    次に、警告の 1 つを表示および解決します。

警告を表示および解決するには

  1. [エラー一覧] で、次の警告を探します。

    Microsoft.Designing#SR0010: 旧スタイルの結合構文が使用されています

    この警告の原因となったコードは、"dbo.CustOrderHist.proc.sql" という名前のファイルにあります。 行 4、列 18、38、および 48 にそのコードがあります。

  2. [エラー一覧] の警告を右クリックし、[エラーのヘルプを表示] をクリックします。

    規則 SR0010 について説明するヘルプ トピックが表示されます。 その規則をトリガした原因は何であり、警告を解決するにはどうすればよいか、警告はどんなときに無視してよいのかが説明されています。 また、この警告が発生する T-SQL コードのサンプルと、警告を解決するためにそのコードに対して行う更新も確認できます。

  3. [エラー一覧] で、警告をダブルクリックするか、強調表示して Enter キーを押します。

    T-SQL エディタが開き、警告の原因となったコード (dbo.CustOrderHist.proc.sql) が表示されます。 警告の原因となったコードの先頭にカーソルが表示されます。 この場合、推奨されていない JOIN 構文が Orders、Order Details、および Products の各テーブルの結合に使用されているので、FROM 句にカーソルが表示されます。 次のコードが表示されます。

    CREATE PROCEDURE CustOrderHist @CustomerID nchar(5)
    AS
    SELECT ProductName, Total=SUM(Quantity)
    FROM Products P, [Order Details] OD, Orders O, Customers C
    WHERE C.CustomerID = @CustomerID
    AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID
    GROUP BY ProductName
    
  4. コードを次の例のように更新します。

    CREATE PROCEDURE CustOrderHist @CustomerID nchar(5)
    AS
    SELECT ProductName, Total=SUM(Quantity)
    FROM Products P
    INNER JOIN [Order Details] OD
      ON P.ProductID = OD.ProductID
    INNER JOIN [Orders] O
      ON OD.OrderID = O.OrderID
    INNER JOIN [Customers] C
      ON O.CustomerID = C.CustomerID
    WHERE C.CustomerID = @CustomerID
    GROUP BY ProductName
    
  5. [ファイル] メニューの [dbo.CustOrderHist.proc.sql の保存] をクリックします。

    次に、もう 1 つの警告を確認および抑制します。

コード分析の警告を表示および抑制するには

  1. [エラー一覧] で、次の警告を探します。

    Microsoft.Naming#SR0011: Object name(Employee Sales by Country) contains special characters.

    この警告の原因となっているコードは、"dbo.Employee Sales by Country.proc.sql" という名前のファイルにあります。 行 1、列 18 にそのコードがあります。

    この時点で、オブジェクトの名前から特殊文字を削除するかどうかを決定する必要があります。 データベース リファクタリングを使用することで、このオブジェクトへのすべての参照に正しい名前が含まれるようにする更新を自動化できます。 ただし、古い名前に依存するアプリケーションは動作しなくなります。 情報が足りないため最適な方法を判断できない場合は、変更による影響の調査が終わるまで警告を抑制できます。 また、Visual Studio Team System Team Foundation Server で作業項目を作成して、このタスクを追跡したり、別の人に割り当てたりすることもできます。

  2. [エラー一覧] で、[説明] 列の見出しをクリックします。

    [エラー一覧] の警告が説明を基準に並べ替えられ、Microsoft.Naming#SR0011 のすべての警告がグループ化されます。

  3. 最初の Microsoft.Naming#SR0011 の警告 (ファイル "dbo.Alphabetical list of products.view.sql") が表示されるまで [エラー一覧] をスクロールし、SR0011 のすべての警告を強調表示します。

    連続する複数の警告を強調表示するには、対象範囲の最初の警告をクリックし、Shift キーを押しながら範囲の最後の警告をクリックします。

    Dd193414.alert_note(ja-jp,VS.90).gifメモ :

    これらの警告から作業項目を作成するには、強調表示された行を右クリックし、[作業項目の作成] をポイントして、作業項目の種類をクリックします。 名前を変更できるまで警告を抑制する場合は、名前が変更されたら警告の抑制を解除する指示を作業項目に含める必要があります。 このチュートリアルを簡単にするために、作業項目の作成は省略します。

  4. 強調表示された行を右クリックし、[スタティック コード分析メッセージの抑制] をクリックします。

    StaticCodeAnalysis.SuppressMessages.xml という名前のファイルがデータベース プロジェクトに追加されます。 バージョン管理から MyNorthwind.dbproj ファイルをチェックアウトします。 抑制された警告が [エラー一覧] に表示されなくなります。一覧に表示される警告数が減ります。

    Dd193414.alert_note(ja-jp,VS.90).gifメモ :

    データベース プロジェクトのファイルに関する警告を抑制すると、そのファイルに関するその警告のすべてのインスタンスが抑制されます。

    XML ファイルには、抑制された警告の一覧が含まれます。 抑制されたすべての警告を抑制解除する場合は、このファイルを削除します。 詳細については、「方法 : データベース コード分析の警告の抑制を解除する」を参照してください。

    最後の手順では、データベース プロジェクトを再分析します。

データベース プロジェクトを再分析するには

  • [データ] メニューの [スタティック コード分析] をポイントし、[実行] をクリックします。

    データベース プロジェクトの T-SQL コードが再度分析され、28 件の警告が [エラー一覧] に表示されます。 解決または抑制した警告は表示されません。

次の手順

一般的な環境では、[エラー一覧] に表示された警告をそれぞれ分析します。 次に、すぐに修正できる問題は修正し、無視できる問題は抑制し、後から修正する必要がある問題については作業項目を作成します。 一部の問題については、データベース リファクタリングを使用して警告を解決できます。 データベース リファクタリングの詳細については、「データベース コードとデータのリファクタ」を参照してください。

各警告を解決または抑制したら、データベース単体テストとアプリケーション テストを実行して、変更によって問題が発生していないことを確認する必要があります。 データベース単体テストの詳細については、「単体テストによる既存のデータベース コードの検証」を参照してください。

参照

概念

スタティック分析によるデータベース コードの改善