Sdílet prostřednictvím


Problémy s pojmenováním T-SQL

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Při analýze kódu T-SQL v databázovém projektu může být jedno nebo více upozornění kategorizována jako problémy s pojmenováním. Měli byste řešit problémy s pojmenováním, abyste se vyhnuli následujícím situacím:

  • Název, který jste zadali pro objekt, může být v konfliktu s názvem systémového objektu.
  • Zadaný název musí být vždy uzavřený v unikačních znacích (v SQL Serveru, '[' a ']').
  • Zadaný název může zmást ostatní, kteří se pokusí váš kód přečíst a pochopit.
  • Kód se může přerušit, pokud ho spustíte s budoucími verzemi SQL Serveru.

Obecně platí, že problém s pojmenováním můžete potlačit, pokud jiné aplikace, které nemůžete změnit, závisí na aktuálním názvu.

Poskytnutá pravidla identifikují následující problémy s pojmenováním:

SR0011: Nepoužívejte speciální znaky v názvech objektů

Pokud databázový objekt pojmenujete pomocí libovolného znaku v následující tabulce, bude obtížnější odkazovat na tento objekt, ale také na kód, který obsahuje název tohoto objektu:

Character Description
Prázdný znak
[ Levá hranatá závorka
] Pravá hranatá závorka
' Jednoduchá uvozovka
" Dvojitá uvozovka

Jak opravit porušení

Chcete-li tento problém vyřešit, je nutné odebrat všechny speciální znaky z názvu objektu. Pokud se na objekt odkazuje v jiných umístěních v databázovém projektu (například v testech databázových jednotek), měli byste k aktualizaci odkazů použít refaktoring databáze. Další informace naleznete v tématu Přejmenování všech odkazů na databázový objekt.

Example

V prvním příkladu tabulka obsahuje sloupec, který má ve svém názvu speciální znak. V druhém příkladu název neobsahuje speciální znak.

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: Vyhněte se použití rezervovaných slov pro názvy typů

Měli byste se vyhnout použití rezervovaného slova jako názvu uživatelem definovaného typu, protože čtenáři mají obtížnější pochopení kódu databáze. Rezervovaná slova v SQL Serveru můžete použít jako identifikátory a názvy objektů pouze v případě, že používáte identifikátory s oddělovači. Další informace najdete v úplném seznamu rezervovaných klíčových slov.

Jak opravit porušení

Je nutné přejmenovat uživatelem definovaný typ nebo název objektu.

Example

První příklad ukazuje definici uživatelem definovaného typu, který toto upozornění aktivuje. Druhý příklad ukazuje jeden způsob, jak opravit uživatelem definovaný typ a vyřešit problém.

-- 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: Vyhněte se použití sp_ jako předpony pro uložené procedury

V SYSTÉMU SQL Server sp_ předpona určuje systémové uložené procedury. Pokud použijete tuto předponu pro uložené procedury, může být název procedury v konfliktu s názvem systémové uložené procedury, která bude vytvořena v budoucnu. Pokud k takovému konfliktu dojde, může dojít k poruše vaší aplikace, pokud vaše aplikace odkazuje na proceduru, aniž by odkaz kvalifikovala podle schématu. V takovém případě název vytvoří vazbu na systémovou proceduru místo na váš postup.

Jak opravit porušení

Chcete-li tento problém vyřešit, musíte nahradit sp_ jinou předponou pro určení uložených procedur uživatele nebo nesmíte použít žádnou předponu vůbec.

Example

V prvním příkladu název procedury způsobí vydání tohoto upozornění. V druhém příkladu používá procedura usp_ místo předpony sp_ a vyhne se upozornění.

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