Compartir vía


Problemas de nomenclatura de T-SQL

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Base de datos de Azure SQL de Microsoft Fabric

Al analizar el código T-SQL en el proyecto de base de datos, una o varias advertencias podrían clasificarse como problemas de nomenclatura. Debe solucionar los problemas de nomenclatura para evitar las situaciones siguientes:

  • El nombre especificado para un objeto podría entrar en conflicto con el nombre de un objeto del sistema.
  • El nombre que especificó siempre debe incluirse entre caracteres de escape (en SQL Server, "[" y "]").
  • El nombre que especificó podría confundir a otros usuarios al intentar leer y comprender el código.
  • El código podría interrumpirse si lo ejecuta con versiones futuras de SQL Server.

En general, puede suprimir un problema de nomenclatura si otras aplicaciones que no puede cambiar dependen del nombre actual.

Las reglas proporcionadas identifican los siguientes problemas de nomenclatura:

SR0011: Evite el uso de caracteres especiales en nombres de objeto

Si asigna un nombre a un objeto de base de datos usando cualquier carácter de la tabla siguiente, hace que sea más difícil no solo hacer referencia a ese objeto, sino también leer código que contiene el nombre de ese objeto:

Carácter Descripción
Carácter de espacio en blanco
[ Corchete de apertura
] Corchete de cierre
' Comilla simple
" Comillas dobles

Cómo corregir infracciones

Para resolver este problema, debe eliminar todos los caracteres especiales del nombre del objeto. Si se hace referencia al objeto en otras ubicaciones del proyecto de base de datos (por ejemplo, en pruebas unitarias de base de datos), debe usar la refactorización de base de datos para actualizar las referencias. Para obtener más información, consulte Cambiar el nombre de todas las referencias a un objeto de base de datos.

Ejemplo

En el primer ejemplo, una tabla contiene una columna que tiene un carácter especial en su nombre. En el segundo ejemplo, el nombre no contiene ningún carácter especial.

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: Evite el uso de palabras reservadas para nombres de tipo

Debe evitar usar una palabra reservada como nombre de un tipo definido por el usuario, ya que a los lectores les costará más entender el código de la base de datos. Solo puede usar palabras reservadas en SQL Server como identificadores y nombres de objeto si usa identificadores delimitados. Para obtener más información, consulte la lista completa de palabras clave reservadas.

Cómo corregir infracciones

Debe cambiar el nombre del tipo o del objeto definido por el usuario.

Ejemplo

En el primer ejemplo se muestra la definición de un tipo definido por el usuario que desencadena esta advertencia. En el segundo ejemplo se muestra una manera de corregir el tipo definido por el usuario y resolver el problema.

-- 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: Evite usar sp_ como prefijo para los procedimientos almacenados

En SQL Server, el prefijo sp_ designa procedimientos almacenados del sistema. Si usa ese prefijo para los procedimientos almacenados, el nombre del procedimiento podría entrar en conflicto con el nombre de un procedimiento almacenado del sistema que se vaya a crear en el futuro. Si se produce este conflicto, la aplicación podría interrumpirse si la aplicación hace referencia al procedimiento sin calificar la referencia por esquema. En esta situación, el nombre se enlaza con el procedimiento del sistema en lugar de con el procedimiento.

Cómo corregir infracciones

Para resolver este problema, debe reemplazar sp_ por un prefijo diferente para designar procedimientos almacenados de usuario o no usar ningún prefijo.

Ejemplo

En el primer ejemplo, el nombre del procedimiento hace que se emita esta advertencia. En el segundo ejemplo, el procedimiento usa el prefijo usp_ en lugar de sp_ y evita que se produzca la advertencia.

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