Introducción a la extensibilidad de las reglas de análisis de código
Las reglas de análisis de código proporcionadas informan sobre las advertencias de diseño, nomenclatura y rendimiento de Transact-SQL en el código de la base de datos. Si las reglas de análisis de código integradas no abarcan un problema o antipatrón de T-SQL determinado que desee detectar automáticamente, puede crear reglas de análisis de código de base de datos personalizadas.
Por ejemplo, es posible que desee crear una regla personalizada que evite el uso de la instrucción WAITFOR DELAY, como se demuestra en Creación de reglas personalizadas de análisis de código. Para crear reglas de análisis de código de base de datos personalizadas, utilice las clases del espacio de nombres CodeAnalysis.
En esta introducción se describe la arquitectura básica de los distintos componentes de las reglas de análisis de código de base de datos.
Componentes de las reglas de análisis de código de base de datos
En el siguiente diagrama se muestra cómo se procesan los componentes de las reglas de análisis de código de base de datos:
Cuando se usa la característica de reglas de análisis de código de base de datos, se cargan todas las reglas y se usan según cómo las configuró en el proyecto. Para más información, vea: Cómo: Habilitar y deshabilitar reglas específicas para el análisis de código estático de base de datos. El Administrador de extensiones también carga los ensamblados de reglas personalizadas que haya creado y registrado.
Una clase de reglas de análisis de código personalizadas hereda de SqlCodeAnalysisRule. La clase de reglas personalizadas puede tener acceso a objetos útiles a través de su contexto de ejecución de regla. Estos objetos incluyen:
- Metadatos acerca de la propia regla.
- El
Dac.Model.TSqlModel
que representa el esquema de la base de datos, incluidos todos los elementos del modelo, las relaciones entre estos y las propiedades de los elementos. - Para las reglas que examinan elementos específicos, se incluye en el contexto el
Dac.Model.TSqlObject
que representa ese elemento del esquema en el modelo. - Muchos objetos de esquema también tienen una representación ScriptDom, a la que se puede acceder a través de este contexto. Se trata de una representación basada en el AST de un elemento que puede ser útil cuando se intentan detectar posibles problemas de sintaxis, como la presencia de SelectStarExpression.
Para los problemas detectados por la regla, se crea un objeto Dac.CodeAnalysis.SqlRuleProblem
. Al crearla, este objeto SqlRuleProblem
, el Dac.Model.TSqlObject
pertinente y posiblemente un elemento de representación ScriptDom se pasan al constructor y se utilizan para determinar la ubicación del problema en los archivos de código fuente. Al final del análisis, todos estos problemas se pasan al Administrador de errores y se muestran en la lista de errores.
Incorporación de reglas personalizadas a un proyecto SQL
Con los proyectos SQL de estilo SDK de Microsoft.Build.Sql, se incluyen reglas de análisis de código personalizadas en el proyecto agregando una referencia de paquete que contiene las reglas.