共用方式為


T-SQL 命名問題

適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 SQL 資料庫

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

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

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

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

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

如果您使用下表中的任何字元來命名資料庫物件,不僅會增加引用該物件的難度,也會增加閱讀包含該物件名稱的程式碼的難度:

字元 描述
空白字元
[ 左方括弧
] 右方括弧
' 單引號
" 雙引號

如何修正違規

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

範例

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

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 中使用保留字作為識別碼和物件名稱。 如需詳細資訊,請參閱保留的關鍵字的完整清單

如何修正違規

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

範例

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

-- 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_ 來指定使用者預存程序,或者您完全不使用前置詞。

範例

在第一個範例中,程序名稱會導致發出這個警告。 在第二個範例中,程序會使用前置詞 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