2012-03-19 10 views
6

Necesito ejecutar una prueba sobre el procedimiento almacenado en la base de datos de un cliente. ¿Hay alguna forma de probar el procedimiento almacenado sin afectar los datos en la base de datos?Probar el procedimiento almacenado sin afectar la base de datos

Por ejemplo, hay una consulta de inserción en el SP, que cambiará los datos de la base de datos.

¿Hay alguna forma de resolver este problema?

Respuesta

3

Puede ejecutar el procedimiento almacenado en una transacción. Utilice esta secuencia de comandos colocando sus declaraciones entre las líneas de comentarios. Ejecute todo el script, su transacción estará en un estado no comprometido. Luego, resalta la línea ROLLBACK o COMMIT y ejecuta cualquiera de los dos para finalizar.

Siempre tenga copias de seguridad.

Si es posible, trabaje en una caja de arena lejos de los datos de sus clientes como una cuestión de principio.

Tenga en cuenta que podría estar bloqueando datos que podrían estar reteniendo otras declaraciones sql de su cliente mientras está decidiendo si comprometer o revertir.

BEGIN TRANSACTION MyTransaction 
GO 

-- INSERT SQL BELOW 


-- INSERT SQL ABOVE 

GO 
IF @@ERROR != 0 
BEGIN 
     PRINT '--------- ERROR - ROLLED BACK ---------' 
     ROLLBACK TRANSACTION MyTransaction 
END 
ELSE 
BEGIN 
     PRINT '--------- SCRIPT EXECUTE VALID ---------' 
     PRINT '--------- COMPLETE WITH ROLLBACK OR COMMIT NOW! ---------' 
     --ROLLBACK TRANSACTION MyTransaction 
     --COMMIT TRANSACTION MyTransaction 
END 
2

Si el SP está destinado a cambiar los datos, y si usted no permita el dato a cambiar, entonces ¿con qué la "prueba" del SP? ¿Te aseguraras de que no muera? ¿Qué sucede si no devuelve errores, pero no inserta datos?

Puede seguir un camino similar al sugerido por Valamas, pero también necesitará realmente probar SP. Por ejemplo, si los datos particulares están destinados a ser insertada en base a los valores de parámetros determinados, a continuación, tendrá que:

  1. iniciar una transacción
  2. Crear datos de pruebas en la base de datos
  3. llamada del SP con el parámetro particular valora
  4. Todavía dentro de la transacción, comprobar la base de datos para ver si las filas correctas se insertaron
  5. deshacer la transacción

No puedo mostrar el código, pero he tenido éxito al hacer lo anterior en el código en .NET, utilizando el marco de prueba de la unidad de Visual Studio. Uno podría hacer lo mismo con NUnit o cualquier otro marco de prueba de la unidad. No utilicé la característica Prueba de Unidad de Base de Datos de Proyectos de Base de Datos de Visual Studio. Simplemente hice los pasos anteriores en el código, utilizando ADO.NET y la clase SqlTransaction para controlar la transacción.

Cuestiones relacionadas