HOW TO:分析 Transact-SQL 程式碼以找出錯誤
當您利用使用者介面或是 MSBuild 建置專案時,可以視需要分析 Transact-SQL 程式碼。 分析程式碼之後,如果程式碼可能包含設計、命名或效能缺陷,則會出現一個或多個錯誤或警告。 按一下這些錯誤或警告,即可檢視相關的程式碼。 您也可以檢視詳細資訊,以便深入了解其原因以及決定是否要隱藏它們。 如需 Visual Studio Premium 和 Visual Studio Ultimate 中程式碼分析的詳細資訊,請參閱分析資料庫程式碼以改善程式碼品質。
在您分析程式碼之前,可能想要設定隨分析執行的規則。 如需詳細資訊,請參閱 HOW TO:對資料庫程式碼的靜態分析啟用和停用特定規則。 您可以針對不同的組建組態設定不同的規則集。 在開發人員簽入程式碼之前,可先讓他們執行較小的規則集,查看是否有常見的問題,之後就可以每晚執行較完整的分析。
分析 Database 版中的程式碼
若要分析資料庫專案中的 Transact-SQL 程式碼
開啟包含資料庫專案的方案。
指向 [資料] 功能表上的 [靜態程式碼分析],然後按一下 [執行]。
將對資料庫專案中的程式碼進行分析,且任何警告和錯誤會出現在 [錯誤清單] 中。
若要檢視造成錯誤或警告的原始程式碼
在 [錯誤清單] 中,按兩下錯誤或警告。 您也可以反白顯示錯誤或警告,然後按 ENTER。
Transact-SQL 編輯器會開啟並顯示與錯誤或警告相關的程式碼。 游標可能會位於造成錯誤或警告的子句上。
請執行下列其中一個步驟:
立即修正問題。
建立工作項目,以便您或其他小組成員稍後修正此問題。
如需詳細資訊,請參閱 HOW TO:為 Transact-SQL 程式碼的缺失建立工作項目。
隱藏可以安全忽略的錯誤或警告。
如果您隱藏某個錯誤或警告,再次分析程式碼時它就不會再出現。 如需詳細資訊,請參閱 HOW TO:隱藏資料庫程式碼分析警告。
若要顯示錯誤或警告的詳細資訊
在 [錯誤清單] 中,執行下列其中一個步驟:
按一下錯誤或警告,然後按 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
請參閱
工作
逐步解說:分析現有資料庫的 Transact-SQL 程式碼