次の方法で共有


コード品質を向上させるための SQL コード分析

適用対象: SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric SQL Database

データベース コードを分析することで、設計と名前付けの潜在的な問題を排除し、パフォーマンスの落とし穴を回避できます。 概念は、マネージド コードの欠陥を検出して修正するためにスタティック分析を実行するのとよく似ています。 データベース コードに適用する分析ルールを構成し、コードを分析してから、特定した問題を修正または無視します。 データベース コードを分析する前に、まずデータベース スキーマをデータベース プロジェクトにインポートする必要があります。 詳細については、「既存のデータベースから開始する」を参照してください。

提供ルール を使用してスタティック分析を実行することで、次のカテゴリに分類される問題を特定できます:

  • T-SQL の設計の問題 設計の問題には、想定どおりに動作しない可能性があるコード、非推奨の構文、およびデータベースの設計が変更されたときに問題が発生する可能性がある問題が含まれます。

  • T-SQL の名前付けの問題 名前付けの問題は、データベース オブジェクトの名前が予期しない問題を引き起こしたり、一般的に受け入れられる規約に違反したりする可能性がある場合に発生します。

  • T-SQL のパフォーマンスの問題 パフォーマンスの問題には、データベース操作が完了する速度が著しく低下する可能性があるコードが含まれます。 これらの問題の多くは、コードの実行時にテーブル スキャンを発生させるコードを識別します。

    コード分析ルールの SQL Server Data Tools プロジェクト設定のスクリーンショット。

コード分析ルールは拡張可能です。 独自のルールを作成して、独自のコーディング標準を適用できます。 詳細については、「コード分析ルールの拡張情報の概要」を参照してください。

SQL プロジェクト ファイルのサンプルと構文

SQL プロジェクト ファイルには、RunSqlCodeAnalysisSqlCodeAnalysisRules の 2 つのプロパティを含めることができます。 RunSqlCodeAnalysis 要素は、プロジェクトのビルド時にコード分析を実行するかどうかを指定します。 既定では、含まれるすべてのルールが実行され、ルール パターン検出の結果がビルド警告になります。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
  </PropertyGroup>
...

SqlCodeAnalysisRules 要素は、ルールとそのエラー/警告動作を指定します。 次の例では、ルール Microsoft.Rules.Data.SR0006 と Microsoft.Rules.Data.SR0007 が無効になっており、ルール Microsoft.Rules.Data.SR0008 の検出によってビルド エラーが発生します。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
    <SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
  </PropertyGroup>
...

ファイル StaticCodeAnalysis.SuppressMessages.xml をプロジェクトに追加して、特定のコード分析結果を抑制できます。 次の例では、ファイル SR0001 のストアド プロシージャの警告 StoredProcedures/uspGetEmployeeManagers.sql を抑制します。

<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
  <SuppressedFile FilePath="StoredProcedures/uspGetEmployeeManagers.sql">
    <SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
  </SuppressedFile>
</StaticCodeAnalysis>

指定されたルール

T-SQL の設計に関する問題

データベース プロジェクトで T-SQL コードを分析すると、1 つまたは複数の警告が設計上の問題として分類される場合があります。 次の状況を回避するには、設計上の問題に対処する必要があります:

  • データベースに対する後続の変更により、データベースに依存するアプリケーションが中断される可能性があります。
  • そのコードは期待した結果をもたらさない可能性があります。
  • SQL Server の今後のリリースでコードを実行すると、そのコードが中断する可能性があります。

一般に、現在も将来も、アプリケーションが中断する可能性があるからといって、設計上の問題を抑制してはいけません。

指定されたルールは、次の設計上の問題を特定します:

T-SQL の名前付けの問題

データベース プロジェクトで T-SQL コードを分析すると、1 つまたは複数の警告が名前付けの問題として分類される場合があります。 次の状況を回避するには、名前付けの問題に対処する必要があります:

  • オブジェクトに指定した名前は、システム オブジェクトの名前と競合する可能性があります。
  • 指定した名前は、常にエスケープ文字で囲む必要があります (SQL Server では '[' および ']')。
  • 指定した名前は、コードの読み取りと理解を試みる他のユーザーを混乱させる可能性があります。
  • SQL Server の今後のリリースでコードを実行すると、そのコードが中断する可能性があります。

通常、変更できない他のアプリケーションが現在の名前に依存する場合は、名前付けの問題を抑制できます。

指定されたルールは、次の設計上の問題を特定します:

T-SQL のパフォーマンスの問題

データベース プロジェクトで T-SQL コードを分析すると、1 つまたは複数の警告がパフォーマンスの問題として分類される可能性があります。 次の状況を回避するには、パフォーマンスの問題に対処する必要があります:

  • テーブル スキャンは、コードの実行時に実行されます。

一般に、スキャンしてもパフォーマンスが大幅に低下しない程度にテーブルのデータ量が少ない場合は、パフォーマンスの問題を抑制することができます。

指定されたルールは、次の設計上の問題を特定します:

コード分析を有効/無効にする

Visual Studio で SQL コード分析を有効または無効にするには、ソリューション エクスプローラー でプロジェクトを右クリックし、[プロパティ] を選択します。 プロパティ ウィンドウの [コード分析] タブで、目的のコード分析設定を選択します。

特定のルールを無効または有効にするには、テーブルからルールを選択します。 ルールの重大度を変更するには、一覧からそのルールの [警告をエラーとして扱う] ボックスを選択します。

SDK スタイルの SQL プロジェクト (プレビュー) で SQL Code Analysis を有効または無効にするには、.sqlproj ファイルを直接編集します。 プロジェクトをダブルクリックして、.sqlproj ビューから ファイルを開きます。

テキスト エディターから、最初の <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> ブロックに要素 <PropertyGroup> を追加して、コード分析を有効にします。 コード分析を無効にするには、RunSqlCodeAnalysis 要素の値を True または False に変更するか、要素全体を削除します。

SQL データベース プロジェクトの拡張機能で SQL コード分析を有効または無効にするには、.sqlproj ファイルを直接編集します。 .sqlproj ビューから ファイルを開くか、[データベース プロジェクト] ビューでプロジェクトを右クリックし、[.sqlproj ファイルを編集する] を選択します。

テキスト エディターから、最初の <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> ブロックに要素 <PropertyGroup> を追加して、コード分析を有効にします。 コード分析を無効にするには、RunSqlCodeAnalysis 要素の値を True または False に変更するか、要素全体を削除します。

プロジェクト ファイルのコード分析設定をオーバーライドするには、/p:RunSqlCodeAnalysis コマンドを使用して /p:SqlCodeAnalysisRules プロパティと dotnet build プロパティを使用できます。 たとえば、コード分析を無効にしてビルドするには、次のようにします:

dotnet build /p:RunSqlCodeAnalysis=False

特定の SQL コード分析ルールの設定を使用してビルドするには:

dotnet build /p:RunSqlCodeAnalysis=True /p:SqlCodeAnalysisRules="+!Microsoft.Rules.Data.SR0001;+!Microsoft.Rules.Data.SR0008"