共用方式為


T-SQL 命名問題

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 中的 SQL 資料庫

當您在資料庫專案中分析 T-SQL 程式碼時,可能會將一或多個警告分類為命名問題。 您應該解決命名問題,以避免下列情況:

  • 您為物件指定的名稱可能會與系統物件的名稱產生衝突。
  • 您指定的名稱一律必須以逸出字元括住(在 SQL Server、'[' 和 ']' 中)。
  • 您指定的名稱可能會對嘗試閱讀和了解程式碼的其他人員造成混淆。
  • 如果您以未來的 SQL Server 版本執行程式碼,則程式碼可能會損壞。

一般而言,如果您無法變更的其他應用程式依賴於目前的名稱,您有可能隱藏命名問題。

提供的規則會識別下列命名問題:

SR0011:避免在物件名稱中使用特殊字元

如果您使用下表中的任何字元來命名資料庫物件,您不僅要參考該物件,而且更難讀取包含該物件名稱的程式代碼:

Character Description
空白區特徵
[ 左方括弧
] 右方括弧
' 單引號
" 雙引號

如何修正違規

若要解決此問題,您必須從物件名稱中移除所有特殊字元。 如果在您的資料庫專案中的其他位置有對物件的參考(例如資料庫單元測試),您應該使用資料庫重構來更新這些參考。 如需詳細資訊,請參閱「重新命名資料庫物件的所有引用」。

Example

在第一個範例中,數據表包含名稱中有特殊字元的數據行。 在第二個範例中,名稱不包含特殊字元。

CREATE TABLE [dbo].[TableWithProblemColumn]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[Small'String] VARCHAR(10)
)
ON [PRIMARY]

CREATE TABLE [dbo].[FixedTable]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[SmallString] VARCHAR(10)
)
ON [PRIMARY]

SR0012:避免使用類型名稱的保留字

您應該避免使用保留字做為使用者定義類型的名稱,因為讀取器較難瞭解您的資料庫程序代碼。 只有在使用分隔標識符時,才能在 SQL Server 中使用保留字作為標識碼和物件名稱。 如需詳細資訊,請參閱 保留關鍵詞的完整清單

如何修正違規

您必須重新命名使用者定義類型或物件名稱。

Example

第一個範例顯示觸發此警告之使用者定義型別的定義。 第二個範例示範修正使用者定義型別並解決問題的一種方式。

-- Potential misuse of a keyword as a type name
CREATE TYPE Alter
FROM nvarchar(11) NOT NULL;

-- Corrected type name
CREATE TYPE AlterType
FROM nvarchar(11) NOT NULL;

SR0016:避免使用 sp_ 作為預存程式的前置詞

在 SQL Server 中,前置 sp_ 詞會指定系統預存程式。 如果您針對預存程式使用該前置詞,則程式的名稱可能會與未來建立的系統預存程式名稱發生衝突。 如果發生這類衝突,如果您的應用程式參考程式,而不需要依架構限定參考,您的應用程式可能會中斷。 在此情況下,名稱會系結至系統程式,而不是系結至您的程式。

如何修正違規

若要解決此問題,您必須以不同的前置詞取代 sp_ 來指定用戶預存程式,或者您完全不使用前置詞。

Example

在第一個範例中,程式名稱會導致發出這個警告。 在第二個 usp_ 範例中,程式會使用前置詞而非 sp_ ,並避免警告。

CREATE PROCEDURE [dbo].[sp_procWithWarning]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END

CREATE PROCEDURE [dbo].[usp_procFixed]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END