Ben Richardson

Depuración de procedimientos almacenados en SQL Server Management Studio (SSMS)

September 30, 2019 by

Es importante indicar que la depuración de los parámetros de cualquier tema es una de las partes más importantes pero dolorosas y laboriosas de cualquier proceso de software. Por ello es importante encontrar esos algunos de esos errores. Es por ello que debe ejecutar el código paso a paso para ver qué sección del código es responsable del error. Esta acción ejecutada de esta manera se llama depuración en tiempo de ejecución.

Debido a este tema, por suerte y de manera oportuna, SQL Server Management Studio (SSMS) viene con capacidades de depuración automatizadas para ayudar a los desarrolladores a depurar sus scripts. Por esta razón en este artículo, explicaremos de manera muy didáctica y practica cómo se puede utilizar SSMS para depurar los procedimientos almacenados en SQL Server mediante un ejemplo muy simple.

Ejemplo

Para nuestro ejemplo, deberemos utilizar un procedimiento almacenado “spShowOddNumbers” que elige y toma dos números como sus parámetros e imprime todos aquellos números impares entre esos dos números especificados.

El script que llama al procedimiento almacenado en SQL Server es el siguiente:

Opciones de depuración

En SQL Server Management Studio, muestra que tiene una variedad de opciones de depuración

Iniciando la depuración y limpieza

Para iniciar la depuración, debemos iniciar por medio de un procedimiento almacenado del servidor SQL en SQL Server, para este fin presione ALT + F5, o vaya a Depuración -> Posteriormente debe Iniciar la depuración, como se muestra en la figura a continuación:

Start debugging a stored procedure in SQL

A continuación, luego de iniciar el depurador en la ventana donde está llamando a su procedimiento almacenado en SQL Server, usted verá que habrá un cursor amarillo al inicio de la ventana de consulta tal como se muestra a continuación:

Starting to debug a stored procedure in SQL - yellow cursor position

Ahora que se ha comenzado a depurar, se puede recorrer el código.

Verificando y revisando el guion

Es importante mencionar que hay tres opciones para revisar el código: 1) Saltar, 2) Entrar y 3) Salir. Claramente se Puede ver estas opciones haciendo clic en Depurar como se muestra en la siguiente captura de pantalla:

SQL Server debugging - Step out

  1. Paso (F 10)

    Utilizando el comando Step Over simplemente mueve el cursor a la siguiente línea de script ejecutable. Por ejemplo, en caso de que el depurador está en la siguiente ubicación en el script:

    SQL Server debugging - Step over - before

    Al hacer clic en Pasar o presionar F10 simplemente mueve el cursor a la siguiente línea:

    SQL Server debugging - Step over - after

  2. Entrar (F 11)

    Claramente se puede observar que esta es una de las funciones de depuración más importantes y útiles. Por ello Step Into le permite acceder al script de procedimiento almacenado desde el script que llama a ese procedimiento almacenado.

    Es importante mencionar que Step Into funciona como Step Over. Por ello si la línea de script que se ejecuta no contiene ninguna llamada al procedimiento almacenado en SQL Server.

    Por ejemplo, si entras en:

    El depurador simplemente moverá el control a la siguiente línea:

    Eso muestra que la línea anterior contiene una llamada al procedimiento almacenado en SQL Server. Por ello, si ingresa en esta línea de script, el depurador lo llevará y conducirá al script del procedimiento almacenado “spShowOddNumbers” tal como se muestra en la siguiente figura.

    SQL Server debugging - Step into

  3. Salir (Shift + F11)

    Por otro lado, Step Out es lo contrario de Step Into. Si está dentro de un procedimiento almacenado en SQL Server y desea volver al script que llama al procedimiento almacenado, es importante mencionar que puede usar Step Out. Por ejemplo, si hace clic en Step Over en:

    Entonces el depurador lo llevará de regreso al script que llama a la función, es decir

    SQL Server debugging - Step out

Manejo y ejecución de opciones del cursor

Las opciones de depuración muestran una ejecución de una línea a la vez. Si hay un bucle o un fragmento de código largo que desea que su depurador se debe omitir y luego, puede usar la opción “Ejecutar en cursor”.

Por ejemplo, en el caso de que si el cursor está en la siguiente línea del procedimiento almacenado en SQL Server y consiguientemente desea omitir el bucle e ir a la instrucción de impresión después del bucle. Lo que puede hacer Simplemente es ir a la declaración de impresión y hacer clic en “Ejecutar en cursor” tal como se muestra a continuación:

SQL Server debugging - Run to cursor

Ahora se saltará el bucle y luego su cursor apuntará a la declaración de impresión.

La ventana local

Es importante indicar que La ventana local le permitirá y ayudará a realizar un seguimiento de los valores de las variables en el script. En este ejemplo, tenemos dos variables @LowerRange y @UpperRange en nuestro script. Por ello, al iniciar el ciclo while en el procedimiento almacenado en SQL Server, el valor de la variable @LowerRange es 5, mientras que la variable @UpperRange es 20, tal como se muestra en la siguiente figura:

SQL Server debugging -the local window

Por ello una vez que ejecute el ciclo y posteriormente se verifique el valor de las variables, se podrá ver que las variables @LowerRange y @UpperRange mostrarán a 20 como su valor. Adicionalmente la ventana local muestra el Nombre, el Valor y el Tipo de la variable. El uso de la ventana Locals hace que sea muy simple poder realizar un seguimiento de los cambios en los valores de sus variables a medida que avanza en el script.

En el caso de que cerrara la ventana de Locals accidentalmente y se desearía recuperarla, simplemente vaya a Depurar -> Windows -> Locals tal como se muestra a continuación:

SQL Server debugging - Step over - local variables

La ventana de verificación y de vigilancia

La ventana Watch es muy similar a la ventana Locals. Por ello es importante mencionar que la única diferencia que se tiene es que puede agregar o eliminar variables de la ventana Watch, lo que puede ser útil cuando se trabajan con grandes cantidades de variables en scripts más grandes.

Para agregar una variable en la visualización de la ventana Watch, simplemente seleccione la variable, haga clic en el botón derecho y luego seleccione “Agregar Watch” tal como se muestra en la siguiente captura de pantalla:

SQL Server debugging in SSMS - adding a watch

Recuerde que es importante en el caso que se tenga que, para eliminar una variable, haga clic con el botón derecho en el nombre de la variable en la ventana Watch y haga clic en “Eliminar Watch” de la lista de opciones. Tal como se muestra abajo:

SQL Server debugging in SSMS - deleting a watch

La cantidad acumulada de las llamadas

La Pila de llamadas, como su nombre lo indica, muestra la cantidad apilada de llamadas que se han ejecutado hasta el punto actual.

SQL Server debugging in SSMS - the call stack

La primera línea del conjunto de llamadas en la figura anterior, nos dice que actualmente el procedimiento almacenado spShowOddNumbers se viene ejecutando y en este momento el depurador está en la línea 14 del archivo. El mismo que contiene el referido procedimiento almacenado. Cabe mencionar que la segunda línea indica que se llamó a este procedimiento almacenado desde el script en la Línea 7 del archivo SQLQuery2.sql.

La ventana immediate

La ventana Immediate es similar a la ventana de la consola. Por ejemplo, usted puede realizar una gran variedad de operaciones matemáticas dentro de la ventana Inmediata, luego podrá verificar los valores de las variables, etc. La siguiente captura de pantalla contiene un ejemplo de una ventana inmediata.

SQL Server debugging in SSMS - immediate window

Nota: ¡el comando cls borra la ventana inmediata!

Puntos de interrupción y corte

Es importante mencionar que un punto de interrupción o breakpoint es una de las herramientas de depuración más utilizadas en cualquier lenguaje de programación. El punto de interrupción (Breakpoint) le permite especificar la ubicación donde desea que su depurador deje de ejecutar el código. Por ello los breakpoints son especialmente útiles cuando no se desea depurar todas las líneas de código, sino por el contrario lo que se desea es verificar el estado de las variables en ubicaciones específicas de su código.

Para poner un breakpoint en su código, simplemente haga clic en el botón derecho en el área gris al lado izquierdo de la línea del script donde se desea colocar breakpoint. Por ello, de manera alterna se debe presionar F9 lo que agregará automáticamente un breakpoint a la línea. Al presionar la tecla F9 nuevamente se eliminará el breakpoint.

SQL Server debugging in SSMS - Break points

Recuerde que se puede ver en la figura anterior que se ha agregado un breakpoint a la línea que ejecuta el procedimiento almacenado “spShowOddNumbers” en SQL Server. Consiguientemente ahora, depure este script. Verá que el depurador comenzará en la primera línea del script.

SQL Server debugging in SSMS - the debugger starting in the first line of the script

Ahora presione ALT + F5 o de lo contrario vaya al menú de depuración nuevamente y haga clic en Depurar -> Continuar. Entonces usted vera que, en lugar de depurar la siguiente línea, lo que el depurador realizará es que saltará directamente a la línea más cercana al breakpoint

SQL Server debugging in SSMS - adding a watch - Press ALT + F5

Vale la pena mencionar que también se pueden crear breakpoints condicionales. Estos puntos de interrupción condicionales se alcanzarán solo cuando se cumplan las condiciones especificadas.

Para especificar una condición en el punto de ruptura, simplemente haga clic en el botón derecho en el punto de ruptura y seleccione “Condiciones” tal como se muestra en la figura a continuación:

Debugging a SQL Server stored procedure in SSMS - Conditions

Entonces se abrirá una nueva ventana donde usted puede especificar las condiciones que deben cumplirse previamente y antes de que pueda alcanzar un breakpoint. Si adicionalmente usted desea que este breakpoint solo se alcance cuando @LowerRange es mayor que 15, usted puede agregar esto como una condición, tal como se muestra en la imagen a continuación:

Debugging a SQL Server stored procedure in SSMS - Setting variables for a condition

Conclusión

Recuerde que, en este artículo, mostramos y explicamos sobre qué diferentes opciones ofrecen Microsoft SQL Server Management Studio para depurar un script o procedimiento almacenado en SQL Server.

Otros grandes artículos de Ben

Cómo usar las funciones integradas de SQL Server y crear funciones escalares definidas por el usuario
Cómo usar las funciones de ventana
Depuración de procedimientos almacenados en SQL Server Management Studio (SSMS)

Ben Richardson

Ben Richardson

Ben Richardson dirige Acuity Training, un proveedor líder de entrenamiento SQL en el Reino Unido. Ofrece un amplio rango de entrenamiento SQL, desde cursos de introducción hasta entrenamiento acerca de administración avanzada y almacén de datos –vea aquí para más detalles. Acuity tiene oficinas en Londres y Guildford, Surrey. Él también escribe ocasionalmente el blog de Acuity.

Ver todas las entradas de Ben Richardson
Ben Richardson
1,469 Views