Compartir a través de


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.

    Captura de pantalla de la configuración del proyecto de SQL Server Data Tools para reglas de análisis de 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:

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:

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:

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"