Análisis de código SQL para mejorar la calidad del código
Se aplica a: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de datos de Azure SQL de Microsoft Fabric
Puede eliminar posibles problemas de diseño y nomenclatura y evitar problemas de rendimiento mediante el análisis del código de la base de datos. Los conceptos son muy similares que para realizar análisis estáticos para detectar y corregir defectos en código administrado. Configure las reglas de análisis que desea aplicar al código de base de datos, analice el código y, a continuación, corrija o ignore los problemas que identifique. Para poder analizar el código de la base de datos, primero debe importar el esquema de la base de datos en un proyecto de base de datos. Para obtener más información, consulte: Iniciar desde una base de datos existente.
Al realizar análisis estáticos con las reglas proporcionadas, puede identificar problemas que se dividen en las siguientes categorías:
Problemas de diseño de T-SQL Los problemas de diseño incluyen código que podría no comportarse de la manera esperada, sintaxis en desuso y problemas que podrían causar problemas al cambiar el diseño de la base de datos.
Problemas de nomenclatura de T-SQL Los problemas de nomenclatura surgen si el nombre de un objeto de base de datos puede provocar problemas inesperados o infringir convenciones aceptadas con carácter general.
Problemas de rendimiento de T-SQL Los problemas de rendimiento incluyen código que podría reducir notablemente la velocidad con la que se completan las operaciones de base de datos. Muchos de estos problemas identifican código que provocará un recorrido de tabla cuando se ejecute el código.
Las reglas de análisis de código son extensibles. Puede crear sus propias reglas para aplicar sus propios estándares de codificación. Para obtener más información, consulte Introducción a la extensibilidad de las reglas de análisis de código.
Ejemplo y sintaxis del archivo de proyecto SQL
Un archivo de proyecto SQL puede contener dos propiedades: RunSqlCodeAnalysis
y SqlCodeAnalysisRules
. El elemento RunSqlCodeAnalysis
especifica si se ejecuta el análisis de código cuando se compila el proyecto. De forma predeterminada, todas las reglas incluidas se ejecutan y la detección de patrones de reglas da como resultado una advertencia de compilación.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
<Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
<PropertyGroup>
<Name>AdventureWorks</Name>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
<ModelCollation>1033, CI</ModelCollation>
<RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
</PropertyGroup>
...
El elemento SqlCodeAnalysisRules
especifica las reglas y su comportamiento de error/advertencia. En el ejemplo siguiente, las reglas Microsoft.Rules.Data.SR0006 y Microsoft.Rules.Data.SR0007 están inhabilitadas y una detección de la regla Microsoft.Rules.Data.SR0008 producirá un error de compilación.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
<Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
<PropertyGroup>
<Name>AdventureWorks</Name>
<DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
<ModelCollation>1033, CI</ModelCollation>
<RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
<SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
</PropertyGroup>
...
Se puede agregar un archivo StaticCodeAnalysis.SuppressMessages.xml
al proyecto para suprimir los resultados específicos del análisis de código. En el ejemplo siguiente se suprime la advertencia SR0001
del procedimiento almacenado en el archivo StoredProcedures/uspGetEmployeeManagers.sql
.
<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
<SuppressedFile FilePath="StoredProcedures/uspGetEmployeeManagers.sql">
<SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
</SuppressedFile>
</StaticCodeAnalysis>
Reglas proporcionadas
Problemas de diseño de T-SQL
Al analizar el código T-SQL en el proyecto de base de datos, una o varias advertencias podrían clasificarse como problemas de diseño. Debe solucionar los problemas de diseño para evitar las situaciones siguientes:
- Los cambios posteriores en la base de datos pueden interrumpir las aplicaciones que dependen de ella.
- Es posible que el código no genere el resultado esperado.
- El código podría interrumpirse si lo ejecuta con versiones futuras de SQL Server.
En general, no debe suprimir un problema de diseño porque podría interrumpir la aplicación, ya sea ahora o en el futuro.
Las reglas proporcionadas identifican los siguientes problemas de diseño:
- SR0001: Evite SELECT * en procedimientos almacenados, vistas y funciones con valores de tabla
- SR0008: Considere la posibilidad de usar SCOPE_IDENTITY en lugar de @@IDENTITY
- SR0009: Evite usar tipos de longitud variable con un tamaño de 1 o 2
- SR0010: Evite usar sintaxis en desuso al combinar tablas o vistas
- SR0013: El parámetro de salida (parámetro) no se rellena en todas las rutas de acceso al código
- SR0014: La pérdida de datos puede producirse al convertir de {Type1} a {Type2}
Problemas de nomenclatura de T-SQL
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 deberá 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 diseño:
- SR0011: Evite el uso de caracteres especiales en nombres de objeto
- SR0012: Evite el uso de palabras reservadas para nombres de tipo
- SR0016: Evite usar sp_ como prefijo para los procedimientos almacenados
Problemas de rendimiento de T-SQL
Al analizar el código T-SQL en el proyecto de base de datos, una o varias advertencias podrían clasificarse como problemas de rendimiento. Debe solucionar los problemas de rendimiento para evitar la situación siguiente:
- Se producirá un recorrido de tabla cuando se ejecute el código.
En general, puede suprimir un problema de rendimiento si la tabla contiene tan pocos datos que un examen no hará que el rendimiento baje significativamente.
Las reglas proporcionadas identifican los siguientes problemas de diseño:
- SR0004: Evite el uso de columnas que no tienen índices como expresiones de prueba en predicados IN
- SR0005: Evite usar patrones que empiecen por "%" en predicados LIKE
- SR0006: Mueva una referencia de columna a un lado de un operador de comparación para usar un índice de columna
- SR0007: Use ISNULL(column, default_value) en columnas que aceptan valores NULL en expresiones
- SR0015: Extraiga llamadas de función deterministas de predicados WHERE
Habilitar e inhabilitar el análisis de código
Para habilitar o inhabilitar el análisis de código SQL en Visual Studio, haga clic con el botón derecho en el proyecto en el Explorador de soluciones y seleccione Propiedades. En la pestaña Análisis de código de la ventana Propiedades, seleccione la configuración de análisis de código deseada.
Para habilitar o inhabilitar una regla específica, seleccione la regla de la tabla. Para cambiar la gravedad de una regla, marque el cuadro Tratar la advertencia como error para esa regla de la lista.
Para habilitar o deshabilitar el análisis de código SQL en los proyectos SQL de estilo SDK (versión preliminar), edite el archivo .sqlproj
directamente. Haga doble clic en el proyecto para abrir el archivo .sqlproj
desde la vista del Explorador de soluciones.
En el editor de texto, agregue un elemento <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
al primer bloque <PropertyGroup>
para habilitar el análisis de código. Para inhabilitar el análisis de código, cambie el valor del elemento RunSqlCodeAnalysis
a True
o False
o elimine el elemento por completo.
Para habilitar o inhabilitar el análisis de código SQL en la extensión Proyectos de base de datos SQL, edite el archivo .sqlproj
directamente. Abra el archivo .sqlproj
desde la vista Explorador o haga clic con el botón derecho sobre el proyecto en la vista Proyectos de base de datos y seleccione Editar el archivo .sqlproj.
En el editor de texto, agregue un elemento <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
al primer bloque <PropertyGroup>
para habilitar el análisis de código. Para inhabilitar el análisis de código, cambie el valor del elemento RunSqlCodeAnalysis
a True
o False
o elimine el elemento por completo.
Para invalidar la configuración de análisis de código en el archivo del proyecto, puede usar las propiedades /p:RunSqlCodeAnalysis
y /p:SqlCodeAnalysisRules
con el comando dotnet build
. Por ejemplo, para compilar con el análisis de código inhabilitado:
dotnet build /p:RunSqlCodeAnalysis=False
Para compilar con una configuración específica de reglas de análisis de código SQL:
dotnet build /p:RunSqlCodeAnalysis=True /p:SqlCodeAnalysisRules="+!Microsoft.Rules.Data.SR0001;+!Microsoft.Rules.Data.SR0008"