Procedura dettagliata: analisi del codice Transact-SQL di un database esistente

È possibile migliorare la qualità del codice Transact-SQL in uno schema di database importandolo in un progetto di database e analizzando il codice rispetto a un set di regole. È ad esempio possibile rilevare eventuali errori in uno schema necessario, ma sviluppato da altri e la cui qualità non è ancora stata verificata. Per ulteriori informazioni, vedere Analisi del codice di database per migliorare la qualità del codice.

Per poter analizzare il codice del database, è necessario importare lo schema di un database esistente in un progetto di database. In questo progetto è contenuto codice di un livello di qualità non noto. Si desidera analizzare il codice Transact-SQL applicando tutte le regole disponibili per l'analisi statica del codice. Successivamente, si potrebbe decidere di disattivare alcun regole per il team, ma per questa valutazione iniziale si desidera rilevare tutti i potenziali problemi presenti nel codice del database. A questo scopo, si rivedono gli avvisi e il codice che li ha generati, si corregge un avviso, se ne eliminano altri, quindi si analizza nuovamente il progetto di database.

Prerequisiti

Prima di completare questa procedura dettagliata, è necessario completare la Procedura dettagliata: Includere uno schema di database esistente nel controllo della versione. In questa procedura dettagliata verrà creata una soluzione contenente un progetto di database denominato MyAdvWorks.

Per configurare regole per l'analisi del progetto di database

  1. In Visual Studio aprire la soluzione MyAdvWorks.

  2. In Visualizzazione schema espandere il nodo per il progetto di database.

  3. Scegliere Analisi codice statica dal menu Dati, quindi fare clic su Configura.

    Verranno visualizzate le proprietà dell'analisi del codice per il progetto di database.

  4. Nell'elenco Regole espandere i nodi Progettazione, Denominazione e Prestazioni per visualizzare tutte le regole disponibili per l'analisi del codice Transact-SQL.

  5. Verificare che le caselle di controllo per tutte le regole siano selezionate.

    È possibile selezionare o deselezionare la casella di controllo per una categoria di regole, ad esempio Progettazione, per selezionare o deselezionare le caselle di controllo per ogni regola di quella categoria.

    Nota

    È possibile considerare errore una regola e non un avviso selezionando la casella di controllo Considera l'avviso come un errore per quella regola.

  6. Scegliere Salva tutto dal menu File.

    A questo punto, si analizzerà il codice Transact-SQL nel progetto di database. In questa procedura dettagliata l'analisi verrà avviata manualmente, tuttavia è possibile configurarla affinché venga avviata dopo il completamento di ogni compilazione del progetto di database. Per ulteriori informazioni, vedere Procedura: abilitare e disabilitare l'analisi statica del codice del database.

Per analizzare il progetto di database

  • Scegliere Analisi codice statica dal menu Dati, quindi fare clic su Esegui.

    Verrà analizzato il codice Transact-SQL nel progetto di database e gli avvisi verranno visualizzati nell'Elenco errori. Se l'Elenco errori non viene visualizzato, scegliere Elenco errori dal menu Visualizza.

    A questo punto, verrà visualizzato e corretto uno degli avvisi.

Per visualizzare e correggere un avviso

  1. Nell'Elenco errori trovare l'avviso seguente:

    SR0014 : Microsoft.Rules.Data: Possibile perdita di dati durante il cast da Stringa ASCII (1) a SmallInt.

    Il codice che ha provocato questo avviso è contenuto nel file denominato "ufnGetStock.function.sql". È possibile trovare il codice alla riga 12, colonna 30.

  2. Fare clic con il pulsante destro del mouse sull'avviso nell'Elenco errori, quindi fare clic su Mostra guida errore.

    Verrà visualizzato l'argomento della Guida relativo alla regola SR0014. È possibile comprendere ciò che ha attivato la regola, come risolvere l'avviso e in quali casi ignorarlo. È inoltre possibile visualizzare un esempio di codice Transact-SQL che può provocare questo avviso e aggiornamenti che possono risolverlo.

  3. Nell'Elenco errori fare doppio clic sull'avviso oppure evidenziarlo e premere INVIO.

    Viene avviato l'editor Transact-SQL e viene visualizzato il codice che ha provocato l'avviso. Il cursore è visibile all'inizio del codice che ha provocato l'avviso. In questo caso, il cursore viene visualizzato nella clausola FROM, in quanto la colonna Integer, ovvero LocationID, viene confrontata con una costante con singolo carattere, '6'. Verrà visualizzato il codice seguente:

    CREATE FUNCTION [dbo].[ufnGetStock](@ProductID [int])
    RETURNS [int] 
    AS 
    -- Returns the stock level for the product. This function is used internally only
    BEGIN
        DECLARE @ret int;
    
        SELECT @ret = SUM(p.[Quantity]) 
        FROM [Production].[ProductInventory] p 
        WHERE p.[ProductID] = @ProductID 
            AND p.[LocationID] = '6'; -- Only look at inventory in the misc storage
    
        IF (@ret IS NULL) 
            SET @ret = 0
    
        RETURN @ret
    END;
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scalar function returning the quantity of inventory in LocationID 6 (Miscellaneous Storage)for a specified ProductID.', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'FUNCTION', @level1name = N'ufnGetStock';
    
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Input parameter for the scalar function ufnGetStock. Enter a valid ProductID from the Production.ProductInventory table.', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'FUNCTION', @level1name = N'ufnGetStock', @level2type = N'PARAMETER', @level2name = N'@ProductID';
    
  4. Aggiornare il codice per l'istruzione SELECT in base all'esempio seguente:

        SELECT @ret = SUM(p.[Quantity]) 
        FROM [Production].[ProductInventory] p 
        WHERE p.[ProductID] = @ProductID 
            AND p.[LocationID] = 6; -- Only look at inventory in the misc storage
    
  5. Scegliere Salva ufnGetStock.function.sql dal menu File.

    A questo punto, verrà rivisto un secondo avviso, ma non visualizzato.

Per visualizzare ed eliminare un avviso di analisi del codice

  1. Nell'Elenco errori trovare l'avviso seguente:

    SR0011 : Microsoft.Rules.Data: Object name(Database Version) contains special characters.

    Il codice che provoca questo avviso si trova nel file denominato "AWBuildVersion.table.sql". È possibile trovare il codice alla riga 3, colonna 5.

    A questo punto, è necessario decidere se eliminare i caratteri speciali dal nome dell'oggetto. Tramite il refactoring del database, è possibile rendere automatico l'aggiornamento di tutti i riferimenti a questo oggetto in modo che contengano il nome corretto. Verranno tuttavia interrotte le applicazioni che dipendono dal nome precedente. Se non si dispone di informazioni sufficienti per scegliere l'approccio migliore, è possibile non visualizzare l'avviso finché non sono state analizzate le conseguenze della modifica. È inoltre possibile creare un elemento di lavoro in Visual Studio Team Foundation Server per tenere traccia di questa attività o assegnarla a qualcun altro.

  2. Nell'Elenco errori fare clic sull'intestazione per la colonna Descrizione.

    In Elenco errori gli avvisi sono ordinati in base alla descrizione e tutti gli avvisi SR0011 saranno raggruppati insieme.

  3. Scorrere Elenco errori fino a visualizzare l'avviso SR0011 e quindi evidenziarlo.

    Qualora si desiderasse ignorare più avvisi, è possibile evidenziare un elenco contiguo di avvisi facendo clic sul primo avviso nell'elenco e quindi premendo MAIUSC mentre si fa clic sull'ultimo avviso nell'elenco.

    Nota

    È possibile creare un elemento di lavoro da questo elenco facendo clic con il pulsante destro del mouse sulla riga evidenziata, scegliendo Crea elemento di lavoro e facendo clic su un tipo di elemento di lavoro. Se si elimina l'avviso finché non è possibile modificare il nome, è necessario includere un'istruzione nell'elemento di lavoro per visualizzare l'avviso dopo la modifica del nome. Per mantenere breve questa procedura dettagliata, non creare gli elementi di lavoro.

  4. Fare clic con il pulsante destro del mouse su una riga evidenziata, quindi fare clic su Non visualizzare messaggi di analisi codice statica.

    Un file denominato StaticCodeAnalysis.SuppressMessages.xml verrà aggiunto al progetto di database. Il file MyAdvWorks.dbproj verrà estratto dal controllo della versione. Gli avvisi non visualizzati verranno rimossi dall'Elenco errori.

    Nota

    Se non si visualizza un avviso per un file nel progetto di database, non si visualizzano anche tutte le relative istanze.

    Il file XML contiene l'elenco degli avvisi non visualizzati. È possibile eliminare quel file se si desidera visualizzare tutti gli avvisi. Per ulteriori informazioni, vedere Procedura: visualizzare nuovamente gli avvisi dell'analisi codice del database.

    Nella procedura finale verrà nuovamente analizzato il progetto di database.

Per analizzare nuovamente il progetto di database

  • Scegliere Analisi codice statico dal menu Dati, quindi fare clic su Esegui.

    Verrà nuovamente analizzato il codice Transact-SQL nel progetto di database e gli avvisi rimanenti verranno visualizzati in Elenco errori. Gli avvisi corretti o eliminati non verranno visualizzati.

Passaggi successivi

In un ambiente tipico ogni avviso verrebbe analizzato nell'Elenco errori, quindi verrebbero corretti i problemi di rapida soluzione, verrebbero eliminati i problemi che è possibile ignorare e verrebbero creati elementi di lavoro per i problemi da correggere in un secondo momento. Per alcuni problemi, è possibile utilizzare il refactoring del database per risolvere gli avvisi. Per ulteriori informazioni sul refactoring del database, vedere Refactoring del codice e dei dati del database.

Dopo avere risolto o eliminato ogni avviso, eseguire unit test del database e test dell'applicazione per verificare che le modifiche non abbiano creato altri problemi. Per ulteriori informazioni sugli unit test del database, vedere Verifica del codice del database tramite unit test.

Vedere anche

Concetti

Analisi del codice di database per migliorare la qualità del codice