Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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ů
- SR0012: Nepoužívejte rezervovaná slova pro názvy typů
- SR0016: Nepoužívejte sp_ jako předponu pro uložené procedury
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