如何:通过分析 Transact-SQL 代码找到缺陷

使用用户界面生成项目时或使用 MSBuild 生成项目时,可以根据需要分析 Transact-SQL 代码。 分析代码后,如果代码可能含有设计、命名或性能缺陷,将显示一个或多个错误或警告。 可以单击这些错误或警告来查看与其相关的代码。 还可以查看更多信息,以更好地了解其原因以及是否禁止显示这些错误或警告。 有关 Visual Studio 高级专业版 和 Visual Studio 旗舰版 中代码分析的更多信息,请参见分析数据库代码以提高代码质量

分析代码前,可能要配置将作为分析的一部分运行的规则。 有关更多信息,请参见如何:为静态分析数据库代码启用和禁用特定规则。 对不同的生成配置可以配置不同的规则集。 可以让开发人员运行少量规则以检查是否有常见问题,然后再让他们签入其代码,还可以在夜间运行更全面的分析。

分析 Database Edition 中的代码

分析数据库项目中的 Transact-SQL 代码

  1. 打开包含数据库项目的解决方案。

  2. 在**“数据”菜单上,指向“静态代码分析”,然后单击“运行”**。

    此时将分析数据库项目中的代码,并在**“错误列表”**中显示任何警告和错误。

查看导致了错误或警告的源代码

  1. 在**“错误列表”**中双击某个错误或警告。 还可以突出显示某个错误或警告,然后按 Enter。

    此时将打开 Transact-SQL 编辑器,并显示与错误或警告相关的代码。 如果可能,光标将位于导致该错误或警告的子句处。

  2. 执行以下步骤之一:

显示有关错误或警告的更多信息

  • 在**“错误列表”**中,执行下列步骤之一:

    • 单击错误或警告,然后按 F1。

    • 右击错误或警告,然后单击**“显示错误帮助”**。

      此时将显示与该错误或警告关联的帮助主题。 该主题包含有关问题的原因、如何才能更正代码以及是否禁止显示该错误或警告的信息。

使用 MSBuild 分析代码

如果要在夜间运行中应用一组更全面的规则,则可能会决定使用 MSBuild 分析代码。 可以配置每个生成配置的规则,然后指定包含要应用的规则的配置。

可以使用响应文件向 MSBuild 提供命令行参数。 此文件中可以包含对 MSBuild 有效的任何命令行开关,其中包括重写项目属性的那些开关。 有关响应文件的更多信息,请参见 MSBuild 响应文件。有关 MSBuild 的命令行选项的更多信息,请参见 MSBuild 命令行参考

从命令提示符下分析代码时,结果将写入名为 StaticCodeAnalysis.Results.xml 的 XML 文件。 可以在 SQL 子文件夹中您的项目文件夹下找到此文件。 可以通过重写 ResultsFile 项目属性的值来指定不同的文件名。

从命令提示符下分析数据库项目中的 Transact-SQL 代码

  1. 打开**“命令提示符”**窗口。

    重要说明重要事项

    若要运行 MSBuild.exe,必须使用 Visual Studio 命令提示符,或者必须运行位于 %VS80COMNTOOLS% 环境变量所指定的文件夹中的 vsvars32.bat 批处理文件。

  2. 浏览到您的项目目录。

  3. 在命令提示符下,键入与以下示例类似的命令行:

    MSBuild /t:StaticCodeAnalysis /p:Configuration=Release DatabaseProject.dbproj
    

    提示

    MSBuild.exe 必须位于 PATH 环境变量指定的路径。

  4. 检查来自 MSBuild.exe 的输出。 将会显示类似下面的输出:

    Microsoft (R) Build Engine Version 4.0.30115.0
    [Microsoft .NET Framework, Version 4.0.30115.0]
    Copyright (C) Microsoft Corporation 2007. All rights reserved.
    
    Build started 9/11/2008 3:38:29 PM.
    Project " C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\DatabaseProject.dbproj" on node 0 (StaticCodeAnalysis target(s)).
      Creating a model to represent the project...
      Loading project files...
      Building the project model and resolving object interdependencies...
      Validating the project model...
    1 problem has been detected
    C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\SCHEMA OBJECTS\SCHEMAS\DBO\PROGRAMMABILITY\STORED PROCEDURES\sp_ProcedureName.proc.SQL(1,24): StaticCodeAnalysis warning : SR0014 : Microsoft.Rules.Data : Data loss might occur when casting from ASCII String(1) to NChar(1). [C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\DatabaseProject.dbproj]
      One problem has been detected.
      The results are saved in C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\sql\release\DatabaseProject.StaticCodeAnalysis.Results.xml.
    Done Building Project " C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\DatabaseProject.dbproj" (StaticCodeAnalysis target(s)) -- FAILED.
    
    
    Build succeeded.
    
    " C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\DatabaseProject.dbproj" (StaticCodeAnalysis target) (1) ->
    (DspStaticCodeAnalysis target) ->
      C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\SCHEMA OBJECTS\SCHEMAS\DBO\PROGRAMMABILITY\STORED PROCEDURES\sp_ProcedureName.PROC.SQL(1,24): StaticCodeAnalysis warning : SR0014 : Microsoft.Rules.Data : Data loss might occur when casting from ASCII String(1) to NChar(1). [C:\Users\UserName\Documents\Visual Studio 2010\Projects\SolutionName\DatabaseProject\DatabaseProject.dbproj]
    
        1 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:07.07
    

请参见

任务

演练:分析现有数据库的 Transact-SQL 代码

概念

分析数据库代码以提高代码质量

使用代码分析来分析托管代码质量

其他资源

Transact-SQL 设计问题

Transact-SQL 命名问题

Transact-SQL 性能问题