Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
При анализе кода T-SQL в проекте базы данных один или несколько предупреждений могут быть классифицированы как проблемы именования. Чтобы избежать следующих ситуаций, следует устранить проблемы с именованием:
- Имя, указанное для объекта, может конфликтовить с именем системного объекта.
- Указанное имя всегда должно быть заключено в экранирующие символы, используемые в SQL Server ("[" и "]").
- Указанное имя может запутать других, которые пытаются прочитать и понять код.
- Код может прерваться, если он запускается с будущими выпусками SQL Server.
Как правило, можно отключить проблему именования, если другие приложения, которые нельзя изменить, зависят от текущего имени.
Указанные правила определяют следующие проблемы именования:
- SR0011: избегайте использования специальных символов в именах объектов
- SR0012: избегайте использования зарезервированных слов для имен типов
- SR0016: избегайте использования sp_ в качестве префикса для хранимых процедур
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