SQLShack

La depuración es una de las partes más importantes pero dolorosas de cualquier proceso de software. Para encontrar algunos errores, debe ejecutar el código paso a paso para ver qué sección del código es responsable del error. Esto se denomina depuración en tiempo de ejecución.

Afortunadamente, SQL Server Management Studio (SSMS) viene con capacidades de depuración automatizadas para ayudar a los desarrolladores a depurar sus scripts. En este artículo, explicaremos prácticamente cómo se pueden usar SSMS para depurar procedimientos almacenados en SQL Server trabajando a través de un ejemplo muy simple.

Ejemplo

Para nuestro ejemplo, usaremos un procedimiento almacenado «spShowOddNumbers» que toma dos números como parámetros e imprime todos los números impares entre esos dos números especificados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

CREAR PROCEDIMIENTO spShowOddNumbers
@LowerRange INT,
@UpperRange INT
COMO
BEGIN
MIENTRAS(@LowerRange < @UpperRange)
BEGIN
if(@LowerRange%2 != 0)
BEGIN
PRINT @LowerRange
END
SET @LowerRange = @LowerRange + 1
END
PRINT ‘NÚMEROS IMPARES IMPRESOS ENTRE’ + RTRIM(@lowerRange) + ‘ y ‘ + RTRIM(@UpperRange)
FIN

El script que llama al procedimiento almacenado en SQL Server:

1
2
3
4
5
6
7
8
9

DECLARE @lowerrange INT
SET @lowerrange = 5
DECLARE @upperrange INT
SET @upperrange = 20
EXEC spShowOddNumbers @lowerrange, @upperrange
CAÍDA de PROC spShowOddNumbers

opciones de Depuración

En SQL Server Management Studio, usted tiene una variedad de opciones de depuración.

Iniciar depuración

Para iniciar la depuración de un procedimiento almacenado de SQL server en SQL Server, pulse ALT + F5 o vaya a Debug – > Iniciar depuración, como se muestra en la siguiente figura:

Iniciar la depuración de un procedimiento almacenado en SQL

Iniciar la depuración de un procedimiento almacenado en SQL

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

Comenzar a depurar un procedimiento almacenado en la posición del cursor amarillo SQL

Comenzar a depurar un procedimiento almacenado en la posición del cursor amarillo SQL

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

Paso a través del Script

Hay tres opciones para pasar por el código: 1) Paso, 2) Paso y 3) Paso. Puede ver estas opciones haciendo clic en Depurar como se muestra en la captura de pantalla a continuación:

Depuración de SQL Server-Paso a paso

Depuración de SQL Server-Paso a paso
  1. Paso por encima (F 10)

    Paso por encima simplemente mueve el cursor a la siguiente línea de script ejecutable. Por ejemplo, si el depurador se encuentra en la siguiente ubicación del script:

    Depuración de SQL Server-Paso a paso-antes

    Depuración de SQL Server-Paso por encima-antes de

    Al hacer clic en Paso por encima o al presionar F10, simplemente mueve el cursor a la siguiente línea:

     Depuración de SQL Server-Paso a paso-después

    Depuración de SQL Server-Paso a paso-después
  2. Paso a (F 11)

    Esta es una de las características de depuración más importantes y útiles. Step Into le permite entrar en el script de procedimiento almacenado desde el script que llama a ese procedimiento almacenado.

    Es importante mencionar que Step Into funciona como Step Over. Si la línea de script que se está ejecutando no contiene ninguna llamada al procedimiento almacenado en SQL Server.

    Por ejemplo, si entras en:

    1
    SET @upperrange = 20

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

    1
    EXEC spShowOddNumbers @lowerrange, @upperrange

    La línea de arriba contiene una llamada al procedimiento almacenado en SQL Server. Ahora, si entras en esta línea de script, el depurador te llevará al script del procedimiento almacenado ‘spShowOddNumbers’ como se muestra en la siguiente figura.

    Depuración de SQL Server-Paso a paso

    Depuración de SQL Server-Paso a paso
  3. Salir (Shift + F11)

    Salir es lo opuesto a entrar. Si se encuentra dentro de un procedimiento almacenado en SQL Server y desea volver al script que llama al procedimiento almacenado, puede usar Step Out. Por ejemplo, si hace clic en Paso a paso en:

    1
    MIENTRAS QUE(@LowerRange & lt; @UpperRange)

    El depurador lo llevará de vuelta al script que llama a la función, es decir,

    Depuración de SQL Server-Paso a paso

    Depuración de SQL Server-Paso a paso

Ejecutar a Cursor

Las opciones de depuración ejecutan una línea a la vez. Si hay un bucle o un fragmento de código largo que desea que su depurador omita, puede usar la opción «Ejecutar al cursor».

1
MIENTRAS QUE(@LowerRange < @UpperRange)

Por ejemplo, si el cursor se encuentra en la siguiente línea del procedimiento almacenado en SQL Server y desea omitir el bucle e ir a la instrucción print después del bucle. Simplemente puede ir a la instrucción print y hacer clic en «Ejecutar al cursor» como se muestra a continuación:

Depuración de SQL Server-Ejecutar en el cursor

Depuración de SQL Server-Ejecutar a cursor

El bucle se saltará y el cursor ahora apuntará a la instrucción print.

La ventana local

La ventana local le ayuda 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. Al inicio del bucle while en el procedimiento almacenado en SQL Server, el valor de la variable @LowerRange es 5, mientras que la variable @UpperRange es 20, como se muestra en la siguiente figura:

Depuración de SQL Server - la ventana local

Depuración de SQL Server: la ventana local

Una vez que ejecute el bucle y luego verifique el valor de las variables, verá que las variables @LowerRange y @UpperRange mostrarán 20 como su valor. La ventana Locales muestra el Nombre, el Valor y el tipo de la variable. El uso de la ventana Locales hace que sea muy sencillo realizar un seguimiento de los cambios en los valores de sus variables a medida que avanza a través del script.

Si cierra la ventana Local accidentalmente y desea recuperarla, simplemente vaya a Depurar – > Windows – > Locales, como se muestra a continuación:

Depuración de SQL Server - Paso sobre variables locales

Depuración de SQL Server: Variables de paso sobre-local

La ventana del reloj

La ventana del reloj es muy similar a la ventana Local. La única diferencia es que puede agregar o eliminar variables de la ventana de vigilancia, lo que puede ser útil cuando se trabaja con un gran número de variables en scripts más grandes.

Para agregar una variable a la ventana de Reloj, simplemente seleccione la variable, haga clic con el botón derecho y luego seleccione «Agregar reloj» como se muestra en la siguiente captura de pantalla:

Depuración de SQL Server en SSMS: agregar un reloj

Depuración de SQL Server en SSMS: agregar un reloj

Del mismo modo, para eliminar una variable, haga clic con el botón secundario en el nombre de la variable en la ventana de Reloj y haga clic en «Eliminar reloj» de la lista de opciones. Como se muestra a continuación:

 Depuración de SQL Server en SSMS-eliminación de un reloj

Depuración de SQL Server en SSMS: eliminar un reloj

La pila de llamadas

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

Depuración de SQL Server en SSMS - la pila de llamadas

Depuración de SQL Server en SSMS - la pila de llamadas

La primera línea de la Pila de llamadas en la figura anterior, nos dice que actualmente se está ejecutando el procedimiento almacenado spShowOddNumbers y que en este momento el depurador se encuentra en la línea 14 del archivo que contiene este procedimiento almacenado. La segunda línea indica que este procedimiento almacenado fue llamado desde el script en la línea 7 del SQLQuery2.archivo sql.

La ventana inmediata

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

Depuración de SQL Server en SSMS - ventana inmediata

Depuración de SQL Server en SSMS-ventana inmediata

Nota: el comando cls borra la ventana inmediata.

Puntos de interrupción

Un punto de interrupción es una de las herramientas de depuración más utilizadas en cualquier lenguaje de programación. El punto de interrupción le permite especificar la ubicación en la que desea que el depurador deje de ejecutar el código. Son particularmente útiles cuando no desea depurar todas las líneas de código, sino que desea verificar el estado de las variables en ubicaciones específicas de su código.

Para poner un punto de interrupción en su código, simplemente haga clic con el botón derecho en el área gris al lado izquierdo de la línea del script donde desea poner su punto de interrupción. Alternativamente, al pulsar F9 se añadirá automáticamente un punto de interrupción a la línea. Al pulsar de nuevo la tecla F9, se eliminará el punto de interrupción.

 Depuración de SQL Server en SSMS-Puntos de interrupción

Depuración de SQL Server en SSMS: Puntos de interrupción

Puede ver en la figura anterior que se ha agregado un punto de interrupción a la línea que ejecuta el procedimiento almacenado «spShowOddNumbers» en SQL Server. Ahora, depura este script. Verá que el depurador comenzará en la primera línea del script.

 Depuración de SQL Server en SSMS: el depurador que comienza en la primera línea del script

Depuración de SQL Server en SSMS: el depurador que comienza en la primera línea del script

Ahora presione ALT + F5 o vaya al menú de depuración de nuevo y haga clic en Depurar – > Continuar. Verá que en lugar de depurar la siguiente línea, el depurador saltará directamente a la línea más cercana con el punto de interrupción.

 Depuración de SQL Server en SSMS-añadir un reloj-Pulse ALT + F5

Depuración de SQL Server en SSMS-añadir un reloj-Pulse ALT + F5

También puede crear puntos de interrupción condicionales. Los puntos de interrupción condicionales solo se alcanzan cuando se cumplen las condiciones especificadas.

Para especificar una condición en el punto de interrupción, simplemente haga clic con el botón derecho en el punto de interrupción y seleccione «Condiciones» como se muestra en la siguiente figura:

Depuración de un procedimiento almacenado de SQL Server en SSMS - Condiciones

Depuración de un procedimiento almacenado de SQL Server en SSMS-Conditions

Se abrirá una nueva ventana en la que podrá especificar las condiciones que se deben cumplir antes de que se alcance un punto de interrupción. Si desea que este punto de interrupción solo se alcance cuando @LowerRange sea mayor que 15, puede agregarlo como condición, como se muestra en la imagen siguiente:

 Depuración de un procedimiento almacenado de SQL Server en SSMS: Variables de configuración para una condición

Conclusión

En este artículo, analizamos las diferentes opciones que ofrece Microsoft SQL Server Management Studio para depurar un script o procedimiento almacenado en SQL Server.

Otros excelentes artículos de Ben

Cómo usar funciones integradas de SQL Server y crear funciones escalares definidas por el usuario

Cómo usar funciones de ventana

Depurar procedimientos almacenados en SQL Server Management Studio (SSMS)

  • Autor
  • Publicaciones recientes
Ben Richardson
Ben Richardson dirige Acuity Training, un proveedor líder de formación SQL en el Reino Unido. Ofrece una gama completa de capacitación SQL, desde cursos introductorios hasta capacitación avanzada en administración y almacenamiento de datos; consulte aquí para obtener más detalles. Acuity tiene oficinas en Londres y Guildford, Surrey. También bloguea ocasionalmente en el blog de Acuity
Ver todas las publicaciones de Ben Richardson

Ben Richardson
Últimos mensajes de Ben Richardson (ver todos)
  • Trabajar con temas de informes de Power BI-25 de febrero de 2021
  • Power BI: Gráficos en Cascada y Efectos visuales combinados-19 de enero de 2021
  • Power BI: Formato condicional y colores de datos en acción-enero 14, 2021