2009-03-05 14 views
6

La mayoría de mis SP simplemente se pueden ejecutar (y probar) con datos ingresados ​​manualmente. Esto funciona bien y el uso de simples instrucciones PRINT me permite "depurar". Sin embargo¿Cuál es su método preferido para depurar procedimientos almacenados MS SQL?

Hay casos en que intervenga y la búsqueda de datos válidos a la entrada es tedioso más de un procedimiento almacenado. Es más fácil simplemente activar cosas desde mi aplicación web.

tengo un poco de experiencia con el perfilador pero no he encontrado una manera de explorar lo que está pasando en línea por línea en mis procedimientos almacenados.

¿Cuáles son sus métodos?

Gracias, como siempre.

Nota: Estoy asumiendo el uso de SQL Server 2005 +

Respuesta

8

Profiler es muy útil, simplemente agregue eventos SP: StmtStarting y filtre la actividad a solo su proceso configurando SPID = xxx. Una vez que lo tienes configurado, es muy fácil ver lo que está pasando.

+0

+1 seguro :) a veces tienes que subir el depurador (con suerte, cómo está escrito + las pruebas que hay significan nunca) – eglasius

4

En realidad se puede adjuntar un depurador a su servidor SQL :) - de frente, dado que se ha configurado en el servidor SQL.

Comprobar este enlace para obtener más información, observe puede establecer puntos de interrupción :) https://web.archive.org/web/20090303135325/http://dbazine.com/sql/sql-articles/cook1.

Comprobar este enlace para un conjunto más general de información: http://msdn.microsoft.com/en-us/library/zefbf0t6.aspx

Actualización: En cuanto "No obstante hay casos en los que haya más de un procedimiento almacenado y la búsqueda de datos válidos a la entrada es tedioso Es más fácil. para activar cosas desde mi aplicación web ".

sugiero configurar las pruebas de integración, se centró en los métodos específicos que interactúan con esos procedimientos. Si la aplicación web está impulsando los procedimientos, es un excelente lugar para tener pruebas válidas + entradas que puede ejecutar en cualquier momento. Si hay varias aplicaciones que interactúan con los procedimientos, en su lugar vería las pruebas unitarias de los procedimientos.

1

prefiero sólo tiene que utilizar procedimientos almacenados para la recuperación de datos, y hacer cualquier complejo "trabajo" en el lado de la aplicación. Debido a que está en lo correcto, tratar de "depurar" lo que está sucediendo dentro de las entrañas de un proceso almacenado anidado, en capas, con bucle de cursor y en muchas capas es muy difícil.

Dicho esto, MS KB 316549 describe cómo utilizar Visual Studio para depurar procedimientos almacenados.

De acuerdo con este artículo, hay una serie de limitaciones a la depuración de esta manera:

  • No se puede "romper" la ejecución.
  • No puede "editar y continuar".
  • No puede cambiar el orden de ejecución de la instrucción.
  • Aunque puede cambiar el valor de las variables, los cambios pueden no tener efecto porque los valores de las variables se almacenan en caché.
  • La salida de la instrucción SQL PRINT no se visualiza.

Editar: Obviamente, si usted es la persona que hace este procedimiento almacenado, entonces no lo hace "muchas capas, cursor de bucle, temp-tabla usando, y anidado".En mi rol como DBA, sin embargo, eso es más o menos lo que encuentro todos los días de los desarrolladores de aplicaciones.

+0

Un desarrollador de base de datos puede ver el código de la aplicación de la misma manera que describió los procedimientos almacenados. – JohnW

+0

Claro que va a ser difícil lidiar si asumes que está escrito de manera horrible. Diría exactamente lo mismo para el código C#: si el desarrollador escribe basura, obtendrá basura. –

+0

Nunca consideraría el uso de un "procedimiento almacenado anidado de muchas capas, de bucle de cursor, de tabla temporal, de varias capas". Casi siempre hay mejores formas de hacer negocios. Creo que el punto que JohnW estaba planteando era que si lo hicieras, sería una definición mala para una persona de base de datos. – HLGEM

0

En cuanto a no saber cuáles serían las entradas válidas, debe probar una amplia gama de entradas, incluidas las entradas especialmente no válidas. Debe definir sus casos de prueba antes de escribir sus procesos. Luego tiene un conjunto reproducible de pruebas para ejecutar cada vez que alguien cambia el complejo proceso.

0

Mi equipo usa SP por regla como nuestra interfaz para la base de datos; lo hacemos de forma que el usuario de la aplicación SOLO puede ejecutar SP (con nuestra convención de nombres).

Una buena práctica que utilizamos, que funciona bien, es que ciertos scripts de prueba están contenidos en los comentarios de SP, y deben ejecutarse en cada rev de un SP, o desarrollo de un nuevo SP.

Siempre debe probar SIEMPRE el SP lo más exhaustivamente posible sin ninguna capa de aplicación involucrada (a través de Management Studio, por ejemplo).

0

Asegúrese de que entre en proc principal almacenada en VS2005/2008, cuando se encuentra con una función anidada, pulse F11 (Entrar en) para entrar en .. .continue la depuración ... No era muy obvio desde el menú de depuración.

1

Prefiero no depurar, en su lugar realizo un desarrollo basado en pruebas, lo que casi elimina la necesidad de depurar.

+0

Ok, entonces cuando tus pruebas fallan y no estás seguro de por qué, TDD hace lo ? –

+0

@Mr. Grieves, cuando mis pruebas fallan, casi siempre sé por qué; mis pruebas generalmente me dicen qué está mal. –

Cuestiones relacionadas