如何:通过分析 Transact-SQL 代码找到缺陷
使用用户界面生成项目时或使用 MSBuild 生成项目时,可以根据需要分析 Transact-SQL 代码。 分析代码后,如果代码可能含有设计、命名或性能缺陷,将显示一个或多个错误或警告。 可以单击这些错误或警告来查看与其相关的代码。 还可以查看更多信息,以更好地了解其原因以及是否禁止显示这些错误或警告。 有关 Visual Studio 高级专业版 和 Visual Studio 旗舰版 中代码分析的更多信息,请参见分析数据库代码以提高代码质量。
分析代码前,可能要配置将作为分析的一部分运行的规则。 有关更多信息,请参见如何:为静态分析数据库代码启用和禁用特定规则。 对不同的生成配置可以配置不同的规则集。 可以让开发人员运行少量规则以检查是否有常见问题,然后再让他们签入其代码,还可以在夜间运行更全面的分析。
分析 Database Edition 中的代码
分析数据库项目中的 Transact-SQL 代码
打开包含数据库项目的解决方案。
在**“数据”菜单上,指向“静态代码分析”,然后单击“运行”**。
此时将分析数据库项目中的代码,并在**“错误列表”**中显示任何警告和错误。
查看导致了错误或警告的源代码
在**“错误列表”**中双击某个错误或警告。 还可以突出显示某个错误或警告,然后按 Enter。
此时将打开 Transact-SQL 编辑器,并显示与错误或警告相关的代码。 如果可能,光标将位于导致该错误或警告的子句处。
执行以下步骤之一:
立即修复问题。
创建工作项,以使您或另一个团队成员稍后修复问题。
有关更多信息,请参见如何:为 Transact-SQL 代码中的缺陷创建工作项。
如果可以安全地忽略该错误或警告,则禁止显示该错误或警告。
如果禁止显示某个错误或警告,则再次分析代码时将不会显示该错误或警告。 有关更多信息,请参见如何:禁止显示数据库代码分析警告。
显示有关错误或警告的更多信息
在**“错误列表”**中,执行下列步骤之一:
单击错误或警告,然后按 F1。
右击错误或警告,然后单击**“显示错误帮助”**。
此时将显示与该错误或警告关联的帮助主题。 该主题包含有关问题的原因、如何才能更正代码以及是否禁止显示该错误或警告的信息。
使用 MSBuild 分析代码
如果要在夜间运行中应用一组更全面的规则,则可能会决定使用 MSBuild 分析代码。 可以配置每个生成配置的规则,然后指定包含要应用的规则的配置。
可以使用响应文件向 MSBuild 提供命令行参数。 此文件中可以包含对 MSBuild 有效的任何命令行开关,其中包括重写项目属性的那些开关。 有关响应文件的更多信息,请参见 MSBuild 响应文件。有关 MSBuild 的命令行选项的更多信息,请参见 MSBuild 命令行参考。
从命令提示符下分析代码时,结果将写入名为 StaticCodeAnalysis.Results.xml 的 XML 文件。 可以在 SQL 子文件夹中您的项目文件夹下找到此文件。 可以通过重写 ResultsFile 项目属性的值来指定不同的文件名。
从命令提示符下分析数据库项目中的 Transact-SQL 代码
打开**“命令提示符”**窗口。
重要事项 若要运行 MSBuild.exe,必须使用 Visual Studio 命令提示符,或者必须运行位于 %VS80COMNTOOLS% 环境变量所指定的文件夹中的 vsvars32.bat 批处理文件。
浏览到您的项目目录。
在命令提示符下,键入与以下示例类似的命令行:
MSBuild /t:StaticCodeAnalysis /p:Configuration=Release DatabaseProject.dbproj
提示
MSBuild.exe 必须位于 PATH 环境变量指定的路径。
检查来自 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