6 votes

Tester la procédure stockée sans affecter la base de données

J'ai besoin d'exécuter un test sur une procédure stockée dans la base de données d'un client. Existe-t-il un moyen de tester la procédure stockée sans affecter les données de la base de données ?

Par exemple, il y a une requête d'insertion dans le SP, qui va changer les données de la base de données.

Y a-t-il un moyen de résoudre ce problème ?

4voto

Valamas - AUS Points 8359

Vous pouvez exécuter la procédure stockée dans une transaction. Utilisez ce script en plaçant vos déclarations entre les lignes de commentaires. Exécutez l'ensemble du script, votre transaction sera dans un état non engagé. Ensuite, mettez en évidence la ligne ROLLBACK ou COMMIT et exécutez l'une ou l'autre en conséquence pour terminer.

Ayez toujours des sauvegardes.

Si possible, travaillez dans un bac à sable loin des données de vos clients, par principe.

Sachez que vous pouvez verrouiller des données, ce qui peut retarder d'autres instructions SQL de votre client pendant que vous décidez de faire un commit ou un rollback.

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

2voto

John Saunders Points 118808

Si la PS est censée changer les données, et si vous ne permettez pas aux données de changer, alors comment allez-vous "tester" la PS ? Allez-vous simplement vous assurer qu'elle ne meurt pas ? Et s'il ne renvoie aucune erreur, mais n'insère aucune donnée ?

Vous pouvez suivre un chemin similaire à celui que Valamas a suggéré, mais vous devrez aussi réellement test le SP. Par exemple, si des données particulières sont destinées à être insérées en fonction de valeurs de paramètres particulières, vous devrez le faire :

  1. Commencer une transaction
  2. Créez toutes les données de test dans la base de données
  3. Appeler la SP avec les valeurs de paramètres particulières
  4. Toujours dans la transaction, vérifiez la base de données pour voir si les lignes correctes ont été insérées.
  5. Annulation de la transaction

Je ne peux pas vous montrer le code, mais j'ai réussi à faire ce qui précède en code .NET, en utilisant le cadre de test unitaire Visual Studio. On pourrait faire la même chose avec NUnit ou tout autre cadre de test unitaire. Je n'ai pas utilisé la fonction de test unitaire de base de données de Visual Studio Database Projects. J'ai simplement effectué les étapes ci-dessus dans le code, en utilisant ADO.NET et la fonction de test unitaire de Visual Studio. SqlTransaction pour contrôler la transaction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X