分析 T-SQL 代码以查找缺陷

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

可以通过将 Transact-SQL 代码导入数据库项目并针对一组规则分析代码来改进数据库架构中的 Transact-SQL 代码的质量。 例如,你可能希望在未开发且其质量尚未验证的架构中找到任何错误。 有关详细信息,请参阅代码分析概述

对于此初始评估,需要查找数据库代码中的所有潜在问题。 查看警告和导致这些警告的代码。 若要改进 T-SQL 代码,你可以更正警告、可能可以抑制警告,并迭代分析数据库项目。

先决条件

在分析数据库项目中的代码之前,必须已有一个 SQL 项目。 有关使用现有数据库创建项目的详细信息,请参阅教程:从现有数据库开始

在项目生成时启用 SQL 代码分析

要在 Visual Studio 中启用 SQL 代码分析,请右键单击“解决方案资源管理器”中的项目,然后选择“属性”。 在“属性”窗口的“代码分析”选项卡中,选中“在生成时启用代码分析”复选框。

保存“项目属性”窗口并返回到解决方案资源管理器。

若要在 SQL 项目中启用 SQL 代码分析,请直接编辑 .sqlproj 文件。 打开 .sqlproj 文件并将元素 <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> 添加到第一个 <PropertyGroup> 块以启用代码分析。

若要在 SQL 数据库项目扩展中启用 SQL 代码分析,请直接编辑 .sqlproj 文件。 从“资源管理器”视图中打开 .sqlproj 文件,或通过右键单击“数据库项目”视图中的项目并选择“编辑 .sqlproj 文件”来打开该文件。

从文本编辑器中,将元素 <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> 添加到第一个 <PropertyGroup> 块以启用代码分析。

若要在 SQL 项目中启用 SQL 代码分析,请直接编辑 .sqlproj 文件。 打开 .sqlproj 文件并将元素 <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> 添加到第一个 <PropertyGroup> 块以启用代码分析。

分析代码

若要在生成时启用代码分析的数据库项目中分析代码,请右键单击“解决方案资源管理器”中的项目,然后选择“生成”

“输出”窗口将显示整个生成过程的结果。

在生成过程中会分析数据库项目中的 T-SQL 代码。 代码分析错误和警告会显示在“错误列表”中。 如果未显示“错误列表”,请打开“视图”菜单,然后选择“错误列表”。 可以双击警告以导航到导致出现警告的代码行。

若要在生成时启用代码分析的数据库项目中分析代码,请右键单击“解决方案资源管理器”中的项目,然后选择“生成”

“输出”窗口将显示整个生成过程的结果。

在生成过程中会分析数据库项目中的 T-SQL 代码。 代码分析错误和警告会显示在“错误列表”中。 如果未显示“错误列表”,请打开“视图”菜单,然后选择“错误列表”。 可以双击警告以导航到导致出现警告的代码行。

若要在生成时启用代码分析的数据库项目中分析代码,请右键单击“数据库项目”视图中的项目,然后选择“生成”

“输出”窗口显示整个生成过程的结果以及代码分析中的任何错误或警告。 每个警告或错误中指定的文件都是导航到导致出现警告的代码行的交互式链接。

若要在生成时启用代码分析的数据库项目中分析代码,请从项目目录中的命令行运行 dotnet build 命令。

dotnet build MyDatabaseProject.sqlproj

该命令的输出显示整个生成过程的结果以及代码分析中的任何错误或警告。

配置代码分析规则

若要在 Visual Studio 中禁用或启用特定规则,请右键单击“解决方案资源管理器”中的项目,然后选择“属性”。 在“属性”窗口的“代码分析”选项卡中,从表中选择规则。 若要更改规则的严重性,请从列表中选择该规则的“将警告视为错误”框。

保存“项目属性”窗口并返回到解决方案资源管理器。

若要在 SQL 项目中禁用或启用特定规则,请直接编辑 .sqlproj 文件。 打开 .sqlproj 文件并在在第一个 SqlCodeAnalysisRules 块中添加或修改 <PropertyGroup> 的元素,以指定要启用或禁用的规则。 以下示例配置禁用两个规则(SR0007 和 SR0006),并切换 SR0008 以造成生成错误。 余下的规则默认已启用。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <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>
...

若要在 SQL 数据库项目扩展中禁用或启用特定规则,请直接编辑 .sqlproj 文件。 从“资源管理器”视图中打开 .sqlproj 文件,或通过右键单击“数据库项目”视图中的项目并选择“编辑 .sqlproj 文件”来打开该文件。

在第一个 SqlCodeAnalysisRules 块中添加或修改 <PropertyGroup> 的元素,以指定要启用或禁用的规则。 以下示例配置禁用两个规则(SR0007 和 SR0006),并切换 SR0008 以造成生成错误。 余下的规则默认已启用。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <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>
...

若要在 SQL 项目中禁用或启用特定规则,请直接编辑 .sqlproj 文件。 打开 .sqlproj 文件并在在第一个 SqlCodeAnalysisRules 块中添加或修改 <PropertyGroup> 的元素,以指定要启用或禁用的规则。 以下示例配置禁用两个规则(SR0007 和 SR0006),并切换 SR0008 以造成生成错误。 余下的规则默认已启用。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <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>
...

抑制代码分析警告

若要抑制 Visual Studio 中特定 .sql 文件的代码分析错误或警告,请右键单击“错误列表”中的警告,然后选择“抑制静态代码分析消息”。 该规则和 .sql 文件的代码分析结果被抑制,不再显示在“错误列表”或生成输出中。

注意

抑制警告不会修复基础问题。 仅当有有效理由执行此操作时,才抑制警告。

若要抑制 SQL 项目中特定 .sql 文件的代码分析错误或警告,请将 StaticCodeAnalysis.SuppressMessages.xml 文件添加到该项目中。 在文件中,指定要抑制其警告的规则 ID 和文件。

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

如果文件不存在,请在项目的根目录中创建它。 如果文件已存在,请通过创建新的 <SuppressedFile><SuppressedRule /></SuppressedFile> 元素来抑制现有 StaticCodeAnalysis.SuppressMessages.xml 文件的其他警告。

该规则和 .sql 文件的代码分析结果将被取消,并且不再显示在生成输出中。

若要抑制 SQL 数据库项目扩展中特定 .sql 文件的代码分析错误或警告,请将 StaticCodeAnalysis.SuppressMessages.xml 文件添加到该项目中。 在文件中,指定要抑制其警告的规则 ID 和文件。

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

如果文件不存在,请在项目的根目录中创建它。 如果文件已存在,请通过创建新的 <SuppressedFile><SuppressedRule /></SuppressedFile> 元素来抑制现有 StaticCodeAnalysis.SuppressMessages.xml 文件的其他警告。

该规则和 .sql 文件的代码分析结果将被取消,并且不再显示在生成输出中。

若要抑制 SQL 项目中特定 .sql 文件的代码分析错误或警告,请将 StaticCodeAnalysis.SuppressMessages.xml 文件添加到该项目中。 在文件中,指定要抑制其警告的规则 ID 和文件。

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

如果文件不存在,请在项目的根目录中创建它。 如果文件已存在,请通过创建新的 <SuppressedFile><SuppressedRule /></SuppressedFile> 元素来抑制现有 StaticCodeAnalysis.SuppressMessages.xml 文件的其他警告。

该规则和 .sql 文件的代码分析结果将被取消,并且不再显示在生成输出中。