Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database w Microsoft Fabric
Podczas analizowania kodu T-SQL w projekcie bazy danych co najmniej jedno ostrzeżenie może być podzielone na kategorie jako problemy z nazewnictwem. Aby uniknąć następujących sytuacji, należy rozwiązać problemy z nazewnictwem:
- Nazwa określona dla obiektu może powodować konflikt z nazwą obiektu systemowego.
- Określona nazwa zawsze musi być ujęta w znaki ucieczki (w programie SQL Server, "[" i "]").
- Określona nazwa może mylić inne osoby, które próbują odczytać i zrozumieć kod.
- Kod może ulec awarii, jeśli uruchomisz go z przyszłymi wersjami programu SQL Server.
Ogólnie rzecz biorąc, możesz pominąć problem z nazewnictwem, jeśli inne aplikacje, których nie można zmienić, zależą od bieżącej nazwy.
Podane reguły identyfikują następujące problemy z nazewnictwem:
- SR0011: Unikaj używania znaków specjalnych w nazwach obiektów
- SR0012: Unikaj używania zastrzeżonych wyrazów dla nazw typów
- SR0016: Unikaj używania sp_ jako prefiksu dla procedur składowanych
SR0011: Unikaj używania znaków specjalnych w nazwach obiektów
Jeśli nazwa obiektu bazy danych jest używana przy użyciu dowolnego znaku w poniższej tabeli, utrudnia to nie tylko odwołanie do tego obiektu, ale także odczytywanie kodu zawierającego nazwę tego obiektu:
Charakter | Opis |
---|---|
|
Znak odstępu |
[ |
Lewy nawias kwadratowy |
] |
Prawy nawias kwadratowy |
' |
Pojedynczy cudzysłów |
" |
Podwójny cudzysłów |
Jak naprawić naruszenia
Aby rozwiązać ten problem, należy usunąć wszystkie znaki specjalne z nazwy obiektu. Jeśli obiekt jest przywołyany w innych lokalizacjach w projekcie bazy danych (na przykład w testach jednostkowych bazy danych), należy użyć refaktoryzacji bazy danych, aby zaktualizować odwołania. Aby uzyskać więcej informacji, zobacz Zmienianie nazwy wszystkich odwołań do obiektu bazy danych.
Przykład
W pierwszym przykładzie tabela zawiera kolumnę, która ma znak specjalny w nazwie. W drugim przykładzie nazwa nie zawiera znaku specjalnego.
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: Unikaj używania zastrzeżonych wyrazów dla nazw typów
Należy unikać używania zastrzeżonego słowa jako nazwy typu zdefiniowanego przez użytkownika, ponieważ czytelnicy mają trudniej zrozumieć kod bazy danych. W programie SQL Server można używać zastrzeżonych słów jako identyfikatorów i nazw obiektów tylko wtedy, gdy używasz identyfikatorów rozdzielanych. Aby uzyskać więcej informacji, zobacz pełną listę zarezerwowanych słów kluczowych.
Jak naprawić naruszenia
Musisz zmienić nazwę typu lub obiektu zdefiniowanego przez użytkownika.
Przykład
W pierwszym przykładzie przedstawiono definicję typu zdefiniowanego przez użytkownika, który wyzwala to ostrzeżenie. W drugim przykładzie pokazano jeden ze sposobów poprawienia typu zdefiniowanego przez użytkownika i rozwiązania problemu.
-- 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: Unikaj używania sp_ jako prefiksu dla procedur składowanych
W programie SQL Server sp_
prefiks wyznacza procedury składowane systemu. Jeśli używasz tego prefiksu dla procedur składowanych, nazwa procedury może powodować konflikt z nazwą procedury składowanej systemu, która zostanie utworzona w przyszłości. Jeśli wystąpi taki konflikt, aplikacja może ulec awarii, jeśli aplikacja odwołuje się do procedury bez kwalifikowania odwołania według schematu. W takiej sytuacji nazwa wiąże się z procedurą systemową zamiast z twoją procedurą.
Jak naprawić naruszenia
Aby rozwiązać ten problem, musisz zastąpić sp_
innym prefiksem, aby wyznaczyć procedury składowane użytkownika lub nie musisz używać prefiksu w ogóle.
Przykład
W pierwszym przykładzie nazwa procedury powoduje wystawienie tego ostrzeżenia. W drugim przykładzie procedura używa prefiksu usp_
zamiast sp_
i unika ostrzeżenia.
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