適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
SQL database in Microsoft Fabric
您可以透過分析資料庫程式碼來消除潛在的設計和命名問題,並避免效能陷阱。 這些概念類似於靜態分析以偵測並修正受管程式碼中的缺陷。 您可以設定要套用至資料庫程式碼的分析規則、分析程式碼,然後校正或忽略您識別的問題。 您必須先將資料庫結構描述匯入資料庫專案,然後才能分析資料庫程式碼。 如需詳細資訊,請參閱從現有的資料庫開始。
透過使用 提供的規則進行靜態分析,您可以識別出屬於以下Transact-SQL(T-SQL)類別的問題:
T-SQL 設計問題:設計問題包括可能不符合預期行為的程式碼、已棄用的語法,以及在資料庫設計改變時可能引發問題的問題。
T-SQL 命名問題:命名問題發生在資料庫物件名稱可能引發意外問題或違反普遍接受的慣例時。
T-SQL 效能問題:效能問題包括可能明顯降低資料庫操作速度的程式碼。 許多問題在於找出那些在執行時會導致資料表掃描的程式碼。
程式碼分析規則可延伸。 您可以建立自己的規則來強制執行自己的程式碼撰寫標準。 如需詳細資訊,請參閱程式碼分析規則擴充性概觀。
SQL 專案檔範例和語法
SQL 專案檔可以包含兩個屬性:RunSqlCodeAnalysisSqlCodeAnalysisRules。 該 RunSqlCodeAnalysis 元素指定專案建置時是否執行程式碼分析。 預設情況下,建置會執行所有包含的規則,且規則模式偵測會導致建置警告。
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
<Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
<PropertyGroup>
<Name>AdventureWorks</Name>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
<ModelCollation>1033, CI</ModelCollation>
<RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
</PropertyGroup>
...
該 SqlCodeAnalysisRules 元素指定規則及其錯誤或警告行為。 以下範例中,規則 Microsoft.Rules.Data.SR0006 和 Microsoft.Rules.Data.SR0007 被禁用,且偵測到規則 Microsoft.Rules.Data.SR0008 會導致建置錯誤。
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
<Sdk Name="Microsoft.Build.Sql" Version="1.0.0" />
<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>
...
你可以在專案中新增檔案 StaticCodeAnalysis.SuppressMessages.xml ,以抑制特定的程式碼分析結果。 下列範例會隱藏檔案 SR0001 中預存程序的警告 StoredProcedures/uspGetEmployeeManagers.sql。
<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
<SuppressedFile FilePath="StoredProcedures/uspGetEmployeeManagers.sql">
<SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
</SuppressedFile>
</StaticCodeAnalysis>
提供的規則
T-SQL 設計問題
當你分析資料庫專案中的 T-SQL 程式碼時,可能會看到一個或多個被歸類為設計問題的警告。 解決這些問題以避免以下情況:
- 資料庫的後續變更可能會中斷依賴資料庫的應用程式。
- 程式碼可能不會產生預期的結果。
- 如果你在未來的 SQL Server 版本中執行程式碼,程式碼就會壞掉。
一般來說,不要壓制設計問題,因為這可能會導致你的應用程式受到破壞,無論是現在還是在未來。
所提供的規則指出以下設計問題:
- SR0001:避免在預存程序、檢視和資料表值函式中使用 SELECT*
- SR0008:考慮用SCOPE_IDENTITY代替@@IDENTITY
- SR0009:避免使用大小為 1 或 2 的可變長度類型
- SR0010:當您聯結資料表或檢視時,避免使用已被取代的語法
- SR0013:輸出參數(parameter)在所有程式碼路徑中並未被填充
- SR0014:從 {Type1} 轉換成 {Type2} 時,可能會發生資料遺失
T-SQL 命名問題
當你分析資料庫專案中的 T-SQL 程式碼時,可能會看到一個或多個被歸類為命名問題的警告。 解決這些問題以避免以下情況:
- 你為物件指定的名稱會和系統物件的名稱衝突。
- 你必須總是用轉脫字元包住指定的名稱(例如在SQL Server中,
[和])。 - 你指定的名稱會讓試圖閱讀和理解你程式碼的人感到困惑。
- 如果你在未來的 SQL Server 版本中執行程式碼,程式碼就會壞掉。
一般來說,如果其他無法更改的應用程式依賴目前名稱,請抑制命名問題。
所提供的規則指出以下設計問題:
T-SQL 效能問題
當你分析資料庫專案中的 T-SQL 程式碼時,可能會看到一個或多個被歸類為效能問題的警告。 解決效能問題以避免以下情況:
- 當你執行程式碼時,會進行資料表掃描。
一般來說,如果資料表資料量很少,掃描不會對效能有顯著影響,你可以抑制效能問題。
所提供的規則指出以下設計問題:
- SR0004:避免使用沒有索引的欄作為 IN 述詞中的測試表達式
- SR0005:避免在 LIKE 述詞中使用開頭為 "%" 的模式
- SR0006:將資料行參考移至比較運算子的一端,以使用資料行索引
- SR0007:在運算式中的可為 Null 資料行上使用 ISNULL(column, default_value)
- SR0015:從 WHERE 條件擷取決定性函式呼叫
啟用和停用程式碼分析
若要啟用或停用 SQL 資料庫專案擴充功能中的 SQL 程式碼分析,請直接編輯 .sqlproj 檔案或使用程式碼分析設定對話框。
請使用 Visual Studio Code 中的 Code Analysis Settings 對話框
SQL Database Projects 擴充功能提供設定對話框,讓你在不直接編輯 .sqlproj 檔案的情況下設定程式碼分析規則。
要開啟Code Analysis設定對話框,請在 Database Projects 檢視中右鍵點擊您的專案,選擇 Code Analysis設定。
在對話框中,你可以:
- 在對話框頂部使用 Enable Code Analysis on Build 切換開關,來啟用或停用建置時的程式碼分析。
- 透過選擇或取消類別名稱旁的勾選框(設計、命名、效能)來啟用或停用某一類別的規則。
- 透過從規則旁的下拉選單選擇嚴重程度等級來更改規則的嚴重程度。 可用選項有警告、錯誤和無。
- 請使用規則列表頂端的搜尋欄搜尋規則。
- 使用「所有嚴重度」下拉選單依嚴重度篩選規則。
選擇 確定 以儲存變更並關閉對話框,或選擇 套用 以儲存但不關閉。 選擇 重置 以回復預設設定。
編輯 SQL 專案檔案以修改程式碼分析設定
從文字編輯器中,將 <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> 元素插入至第一個 <PropertyGroup> 區塊以啟用程式碼分析。 要停用程式碼分析,請將該元素的值 RunSqlCodeAnalysis 更改為或 False 完全移除該元素。
要啟用或停用 SQL Server Management Studio 中的 SQL 程式碼分析(SSMS),請在 方案總管 右鍵點擊專案,選擇 Properties。 在屬性視窗的 Code Analysis 標籤中,選擇想要的code analysis設定。
要停用特定規則或更改規則的嚴重程度,請從規則列表中該規則的下拉選單選擇對應選項。
要啟用或停用 Visual Studio 中的 SQL 程式碼分析,請在 方案總管 右鍵點擊專案,並選擇 Properties。 在屬性視窗的 Code Analysis 標籤中,選擇想要的code analysis設定。
要停用特定規則或更改規則的嚴重程度,請從規則列表中該規則的下拉選單選擇對應選項。
要啟用或停用 Visual Studio 中的 SQL 程式碼分析,請在 方案總管 右鍵點擊專案,並選擇 Properties。 在屬性視窗的 Code Analysis 標籤中,選擇想要的code analysis設定。
要停用特定規則或更改規則的嚴重程度,請從規則列表中該規則的下拉選單選擇對應選項。
若要覆蓋專案檔案中的程式碼分析設定,請使用/p:RunSqlCodeAnalysis與/p:SqlCodeAnalysisRules屬性搭配dotnet build指令。 例如,若要在停用程式碼分析的情況下來建置:
dotnet build /p:RunSqlCodeAnalysis=False
使用特定的 SQL 程式碼分析規則設定來建置:
dotnet build /p:RunSqlCodeAnalysis=True /p:SqlCodeAnalysisRules="+!Microsoft.Rules.Data.SR0001;+!Microsoft.Rules.Data.SR0008"