共用方式為


HOW TO:分析 Transact-SQL 程式碼以找出錯誤

當您利用使用者介面或是 MSBuild 建置專案時,可以視需要分析 Transact-SQL 程式碼。 分析程式碼之後,如果程式碼可能包含設計、命名或效能缺陷,則會出現一個或多個錯誤或警告。 按一下這些錯誤或警告,即可檢視相關的程式碼。 您也可以檢視詳細資訊,以便深入了解其原因以及決定是否要隱藏它們。 如需 Visual Studio Premium 和 Visual Studio Ultimate 中程式碼分析的詳細資訊,請參閱分析資料庫程式碼以改善程式碼品質

在您分析程式碼之前,可能想要設定隨分析執行的規則。 如需詳細資訊,請參閱 HOW TO:對資料庫程式碼的靜態分析啟用和停用特定規則。 您可以針對不同的組建組態設定不同的規則集。 在開發人員簽入程式碼之前,可先讓他們執行較小的規則集,查看是否有常見的問題,之後就可以每晚執行較完整的分析。

分析 Database 版中的程式碼

若要分析資料庫專案中的 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 程式碼

概念

分析資料庫程式碼以改善程式碼品質

使用程式碼分析進行 Managed 程式碼品質分析

其他資源

Transact-SQL 設計問題

Transact-SQL 命名問題

Transact-SQL 效能問題