Compartir a través de


Tutorial: Analizar código Transact-SQL para una base de datos existente

Puede mejorar la calidad del código Transact-SQL en un esquema de base de datos importándolo en un proyecto de base de datos y analizando el código contra un conjunto de reglas. Por ejemplo, quizá desee buscar errores en un esquema que debe utilizar pero que no desarrolló y cuya calidad no se ha comprobado. Para obtener más información, vea Analizar el código de base de datos para mejorar la calidad del código.

Antes de poder analizar el código de la base de datos, debe haber importado ya el esquema para una base de datos existente en un proyecto de base de datos. Ese proyecto contiene código de un nivel de calidad desconocido. Deseará analizar el código Transact-SQL, aplicando todas las reglas disponibles para el análisis de código estático. Después, quizá decida desactivar algunas reglas para el equipo pero, para esta evaluación inicial, deseará encontrar todos los posibles problemas en el código de la base de datos. Revisará las advertencias y el código que produjeron esas advertencias. Corregirá una advertencia, suprimirá más advertencias y, a continuación, analizará de nuevo el proyecto de base de datos.

Requisitos previos

Antes de completar este tutorial, debe completar Tutorial: Agregar un esquema de base de datos al sistema de control de versiones. En ese tutorial, se crea una solución que contiene un proyecto de base de datos que se denomina MyAdvWorks.

Para configurar reglas para analizar el proyecto de base de datos

  1. En Visual Studio, abra la solución MyAdvWorks.

  2. En la Vista de esquema, expanda el nodo del proyecto de base de datos si aún no está expandido.

  3. En el menú Datos, seleccione Análisis de código estático y haga clic en Configurar.

    Aparecerán las propiedades de análisis de código para el proyecto de base de datos.

  4. En la lista Reglas, expanda los nodos Diseño, Nomenclatura y Rendimiento para mostrar todas las reglas que están disponibles para analizar el código Transact-SQL.

  5. Compruebe que las casillas para todas las reglas estén activadas.

    Puede activar o desactivar la casilla para una categoría de reglas, tal como Diseñar, para activar o desactivar las casillas para cada regla de esa categoría.

    Nota

    Puede tratar una regla como un error en lugar de una advertencia activando la casilla Tratar advertencia como un error para esa regla.

  6. En el menú Archivo, haga clic en Guardar todo.

    A continuación, analizará el código Transact-SQL en el proyecto de base de datos. En este tutorial, iniciará el análisis manualmente, pero puede configurarlo para que se inicie después de cada compilación correcta del proyecto de base de datos. Para obtener más información, vea Cómo: Habilitar y deshabilitar el análisis estático de código de base de datos.

Para analizar el proyecto de base de datos

  • En el menú Datos, seleccione Análisis de código estático y haga clic en Ejecutar.

    Se analiza el código Transact-SQL del proyecto de base de datos y las advertencias se muestran en la Lista de errores. Si la Lista de errores no aparece, abra el menú Vista y haga clic en Lista de errores.

    A continuación, verá y corregirá una de las advertencias.

Para ver y corregir una advertencia

  1. En la Lista de errores, busque la siguiente advertencia:

    SR0014 : Microsoft.Rules.Data: Podría producirse una pérdida de datos al convertir de Cadena ASCII (1) a SmallInt.

    El código que produjo esta advertencia está en el archivo denominado "ufnGetStock.function.sql." Puede buscar el código en la línea 12, columna 30.

  2. Haga clic con el botón secundario del mouse en la advertencia de la Lista de errores y haga clic en Ayuda para Mostrar mensaje.

    Aparecerá el tema de Ayuda para la regla SR0014. Puede obtener información sobre lo que activó la regla, cómo resolver la advertencia y cuándo puede ser conveniente hacer caso omiso de la advertencia. También puede ver un ejemplo de código Transact-SQL que produciría esta advertencia y actualizaciones de ese código que resolverían la advertencia.

  3. En la Lista de errores, haga doble clic en la advertencia o resáltela y presione ENTRAR.

    El editor de Transact-SQL se abrirá y mostrará el código que produjo la advertencia. El cursor aparece al principio del código que provocó la advertencia. En este caso, el cursor aparece en la cláusula FROM porque la columna entera, LocationID, se compara con una constante de un solo carácter, 6.' Aparece el código siguiente:

    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. Actualice el código para que la instrucción SELECT coincida con el ejemplo siguiente:

        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. En el menú Archivo, haga clic en Guardar ufnGetStock.function.sql.

    A continuación, revisará y suprimirá una segunda advertencia.

Para ver y suprimir una advertencia de análisis de código

  1. En la Lista de errores, busque la siguiente advertencia:

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

    El código que provoca esta advertencia está en el archivo que se denomina "AWBuildVersion.table.sql." Puede buscar el código en la línea 3, columna 5.

    En este punto, debe decidir si eliminar los caracteres especiales del nombre del objeto. Utilizando refactorización de base de datos, puede automatizar la actualización de todas las referencias a este objeto para que contengan el nombre correcto. Sin embargo, interrumpirá las aplicaciones que dependan del nombre anterior. Si no tiene bastante información para decidir cuál es el mejor enfoque, puede suprimir la advertencia hasta que haya investigado las ramificaciones del cambio. También podría crear un elemento de trabajo en Visual Studio Team Foundation Server para realizar el seguimiento de esta tarea o incluso asignarlo a otra persona.

  2. En la Lista de errores, haga clic en el encabezado para la columna Descripción.

    La Lista de errores ordena las advertencias por sus descripciones, agrupando todas las advertencias SR0011.

  3. Desplace la Lista de errores hasta que aparezca la advertencia SR0011 y, a continuación, resalte esa advertencia.

    Si desea ignorar varias advertencias, puede resaltar una lista contigua de advertencias haciendo clic en la primera advertencia de la lista y, a continuación, presionando la tecla MAYÚS al hacer clic en la última advertencia de la lista.

    Nota

    Puede crear un elemento de trabajo de esta lista haciendo clic con el botón secundario del mouse en cualquier fila resaltada, seleccionando Crear elemento de trabajo y haciendo clic en un tipo de elemento de trabajo. Si suprime la advertencia hasta que se pueda cambiar el nombre, debe incluir una instrucción en el elemento de trabajo para dejar de suprimir la advertencia una vez cambiado el nombre. Para que este tutorial sea breve, omitirá la creación de los elementos de trabajo.

  4. Haga clic en cualquier fila resaltada y haga clic en Suprimir mensajes de análisis de código estático.

    Un archivo que se denomina StaticCodeAnalysis.SuppressMessages.xml se agrega al proyecto de base de datos. El archivo MyAdvWorks.dbproj se desprotege del control de versiones. Las advertencias suprimidas desaparecen de la Lista de errores, dejando menos advertencias en la lista.

    Nota

    Si suprime una advertencia para un archivo del proyecto de base de datos, suprima todas las instancias de esa advertencia para ese archivo.

    El archivo XML contiene la lista de advertencias suprimidas. Puede eliminar ese archivo si desea dejar de suprimir todas las advertencias suprimidas. Para obtener más información, vea Cómo: Detener la supresión de advertencias para el análisis del código de la base de datos.

    En el último procedimiento, analizará de nuevo el proyecto de base de datos.

Para analizar de nuevo el proyecto de base de datos

  • En el menú Datos, seleccione Análisis de código estático y haga clic en Ejecutar.

    El código Transact-SQL del proyecto de base de datos se analiza de nuevo y en la Lista de errores aparecen las advertencias restantes. Las advertencias que corrigió o suprimió no aparecen.

Pasos siguientes

En un entorno típico, analizaría cada advertencia que apareciera en la Lista de errores. A continuación, corregiría los problemas que pudiera corregir inmediatamente, suprimiría los problemas que se pueden ignorar y crearía elementos de trabajo para los problemas que tuviera que corregir después. Para algunos de los problemas, puede utilizar la refactorización de base de datos para resolver las advertencias. Para obtener más información acerca de la refactorización de base de datos, vea Refactorizar código de base de datos y datos.

Después de resolver o suprimir cada advertencia, debe ejecutar las pruebas unitarias de base de datos y las pruebas de aplicación para comprobar que los cambios no han provocado problemas. Para obtener más información sobre las pruebas unitarias de base de datos, vea Comprobar código de base de datos mediante pruebas unitarias.

Vea también

Conceptos

Analizar el código de base de datos para mejorar la calidad del código