Condividi tramite


Panoramica dell'estendibilità delle regole di analisi del codice

Le regole di analisi del codice fornite segnalano gli avvisi di progettazione, denominazione e prestazioni di Transact-SQL nel codice del database. Se le regole di analisi del codice predefinite non coprono un problema di T-SQL specifico o un modello negativo che si vuole che sia rilevato automaticamente, è possibile creare regole di analisi del codice del database personalizzate.

Ad esempio, potrebbe essere necessario creare una regola personalizzata che eviti l'uso dell'istruzione WAITFOR DELAY, come illustrato in Regole di analisi del codice personalizzate. Per creare le regole di analisi del codice del database personalizzate, è possibile usare le classi nello spazio dei nomi CodeAnalysis.

Questa panoramica illustra l'architettura di base tra i vari componenti delle regole di analisi del codice del database.

Componenti delle regole di analisi del codice del database

La figura seguente illustra come vengono elaborati i componenti delle regole di analisi del codice del database:

Screenshot del flusso di elaborazione dell'analisi del codice del database.

Quando si usa la funzionalità regole di analisi del codice del database, tutte le regole vengono caricate e usate in base a come sono state configurate nel progetto. Per altre informazioni, vedere Procedura: Abilitare e disabilitare regole specifiche relative all'analisi statica del codice del database. Gestione estensioni caricherà inoltre qualsiasi assembly di regole personalizzate creato e registrato.

Una classe di regola di analisi del codice personalizzata eredita da SqlCodeAnalysisRule. La classe di regole personalizzate può accedere a oggetti utili tramite il relativo contesto di esecuzione della regola. Questi oggetti includono:

  • Metadati relativi alla regola stessa.
  • Dac.Model.TSqlModel che rappresenta lo schema del database, inclusi tutti gli elementi del modello, le relazioni tra gli elementi e tutte le proprietà degli elementi.
  • Per le regole che esaminano elementi specifici, viene incluso nel contesto l'Dac.Model.TSqlObject che rappresenta l'elemento dello schema nel modello.
  • Molti oggetti dello schema hanno anche una rappresentazione ScriptDom, accessibile tramite questo contesto. Si tratta di una rappresentazione basata sulla classe AST di un elemento che può essere utile per individuare potenziali problemi di sintassi, quali la presenza di SelectStarExpression.

Per eventuali problemi rilevati dalla regola, viene creato un oggetto Dac.CodeAnalysis.SqlRuleProblem. Quando viene creato questo oggetto SqlRuleProblem, l'Dac.Model.TSqlObject appropriato ed eventualmente un elemento della rappresentazione di ScriptDom vengono passati al costruttore e usati per determinare la posizione del problema nei file del codice sorgente. Al termine dell'analisi, tutti questi problemi vengono passati alla gestione errori e visualizzati nell'elenco errori.

Incorporare regole personalizzate in un progetto SQL

Con i progetti SQL in stile SDK Microsoft.Build.Sql è possibile includere regole di analisi del codice personalizzate nel progetto aggiungendo un riferimento al pacchetto contenente le regole.