DEPURACIÓN DE PROCEDIMIENTOS ALMACENADOS CON VISUAL STUDIO
Los que trabajamos en el campo de Business Intelligence (BI) sabemos que nos movemos en la frontera entre el diseño de datos y el desarrollo de aplicaciones.
Por una parte, con frecuencia nos toca definir las estructuras donde se guardarán los datos y por otra escribir consultas, funciones y procedimientos que los manipularán. Eso sin salir del entorno de un sistema de gestión de bases de datos relacionales (RDMS, por sus siglas en inglés), pero frecuentemente hemos de emplear otras herramientas más sofisticadas para la creación de proyectos Extract, Transform and Load (ETL, por sus siglas en inglés), bases de datos multidimensionales o informes.
En Certia solemos trabajar en los entornos de Microsoft y SAP BO, en el caso del de Microsoft, disponemos de dos grandes herramientas dotadas ambas de amplias funcionalidades y ayudas al desarrollador. me refiero a SQL Server Management Studio (SSMS) y Visual Studio (VS).
El editor de consultas de SSMS con Intellisense y depurador es una herramienta que facilita enormemente el trabajo con código Transact SQL (T-SQL). Intellisense evita muchos errores pero aún así podemos cometer otros muchos que Intellisense no puede prevenir. Llegados a este punto, el depurador era una herramienta utilísima. Nuestra felicidad era casi completa hasta que un día…
En la versión 18.0 de SSMS, el botón Depurar había desaparecido. Simplemente, el depurador de T-SQL fue suprimido de SSMS sin más explicaciones. Podemos ver las release notes de la versión 18.0 aquí.
Seguramente estaréis pensando que de eso hace un año y es cierto, pero mucha gente no cambiamos de versión de nuestras herramientas cada vez que se anuncia una nueva actualización salvo que tengamos auténticos problemas. Además tampoco hemos de usar el depurador cada día… afortunadamente.
El caso es que más de uno nos hemos llevado una sorpresa al actualizar a SSMS 18.x.
La alternativa que nos ofrece Microsoft es usar VS para depurar código T-SQL. Más allá de la molestia que pueda representar salir de un entorno conocido y amigable para trabajar en otro nuevo y más complejo, lo cierto es que la medida es coherente con la tendencia de Microsoft de hacer de VS su herramienta de desarrollo para todo; .NET, T-SQL, SQL Server Integration Services (SSIS), SQL Server Analysis Services (SSAS), SQL Server Reporting Services, etc…
Todo podemos desarrollarlo desde VS, depurarlo desde VS y emplear nuestra herramienta Application Lifecycle Management (ALM), como Azure DevOps, desde VS.
Lo cierto es que depurar un procedimiento almacenado (SP, por sus siglas en inglés) en VS no es tan diferente a como se hacía en SSMS. Veamos la manera, pero antes una advertencia: no pretendo explicar aquí cómo manejar el depurador. Asumo que las personas que lo hayan echado en falta ya saben eso. Sólo cómo usarlo en VS para depurar código T-SQL.
Abrimos VS sin iniciar ningún proyecto.
A continuación, en el menú seleccionamos Ver -> Explorador de Objetos de SQL Server (Ctrl+º, Ctrl+S)
Seleccionamos el SP que queremos depurar y hacemos clic derecho para mostrar el menú contextual
De todas las opciones, seleccionamos Depurar procedimiento…
Entonces, si nuestros SP requiere parámetros, se nos abrirá una ventana análoga a esta donde los introduciremos
Una vez pulsado el botón Aceptar, VS abrirá una ventana con el código T-SQL que ejecutará el SP y la ejecución quedará detenida en la primera línea.
A partir de aquí, podéis ir depurando normalmente con las opciones habituales; seguido, paso a paso por instrucciones, poner puntos de interrupción etc.
Sólo una observación. Si vais paso a paso por instrucciones, tened cuidado cuando el SP llama a otro bloque de código (otro SP o una función). Si al llegar a esa línea seguís por instrucciones, el depurador abrirá el nuevo bloque, comenzará a ejecutar su código y cuando termine su ejecución no sabrá volver al SP principal. En ese caso se os abrirá una ventana como esta donde el depurador os pregunta por la localización del código del SP principal.
Si pulsáis Aceptar el depurador dirá que no existe. Si pulsáis Cancelar os encontrareis con este error final.
Por lo que parece, la cosa va a seguir así según este blog:
Para evitar esto, cuando el depurador se halle sobre la línea que llama al nuevo bloque de código, sólo tenéis que cambiar de la opción Paso a paso por instrucciones (F11) a la opción Paso a paso por procedimientos (F10). Eso hará que el depurador se sitúe en la siguiente línea tras haber ejecutado el bloque de código externo en trasfondo, y podréis continuar depurando como queráis.