Comment tester votre requête avant d'exécuter le server sql

J'ai fait une erreur bête au travail une fois sur l'une de nos bases de données de tests internes. Je mettais à jour un logging que je venais d'append parce que j'ai fait une faute de frappe mais cela a entraîné la mise à jour de nombreux loggings parce que dans la clause where j'ai utilisé la key étrangère au lieu de l'identifiant unique

Un de nos développeurs seniors m'a dit de faire un select pour tester quelles lignes il affectera avant de l'éditer. En plus de cela, existe-t-il un moyen d'exécuter votre requête, de voir les résultats mais de ne pas la valider sur la database tant que je ne lui ai pas dit de le faire? La prochaine fois je pourrais ne pas être aussi chanceux. C'est un bon travail que les développeurs seniors peuvent faire des mises à jour en direct!

Supposons d'abord que vous fassiez une erreur lors de la mise à jour d'une database, donc ne le faites jamais à less de savoir comment récupérer, si vous n'exécutez pas le code jusqu'à ce que vous le fassiez,

L'idée la plus importante est que c'est une database de dev que l'on se trompe – alors assurez-vous d'avoir un moyen rapide de le recharger.

Le premier choix est toujours une bonne idée pour voir quelles lignes sont affectées.

Cependant, pour un return rapide à un bon état de la database que je ferais de toute façon est

Pour une mise à jour simple, etc.

Utiliser les transactions

begin transaction une begin transaction , puis effectuez toutes les mises à jour, etc., puis select pour vérifier datatables

La database ne sera pas affectée autant que les autres peuvent voir jusqu'à ce que vous fassiez un dernier commit que vous faites seulement quand vous êtes sûr que tout est correct ou une restauration pour arriver à l'état qui était au début

Il me semble que vous avez juste besoin de prendre l'habitude d'ouvrir une transaction:

 BEGIN TRANSACTION; UPDATE [TABLENAME] SET [Col1] = 'something', [Col2] = '..' OUTPUT DELETED.*, INSERTED.* -- So you can see what your update did WHERE ....; ROLLBACK; 

Que vous venez de courir à nouveau après avoir vu les résultats, en changeant ROLLBACK en COMMIT, et vous avez terminé!

Si vous utilisez Microsoft SQL Server Management Studio, vous pouvez aller dans Tools > Options... > Query Execution > ANSI > SET IMPLICIT_TRANSACTIONS et SSMS ouvrira la transaction automatiquement pour vous. N'oubliez pas de commettre quand vous le devez et que vous bloquez d'autres connections alors que vous ne commettez pas / annulez la connection.

Si vous devez tester dans une database de production et que vous disposez des permissions requirejses, alors écrivez vos requêtes pour créer et utiliser des tables temporaires dont le nom est similaire aux tables de production et dont le schéma autre que les noms d'index est identique. Les noms d'index sont uniques sur une database, au less sur Informix.

Ensuite, lancez vos requêtes et regardez datatables.

Autre que cela, à mon humble avis vous avez besoin d'une database de développement, et peut-être même un server de développement avec une instance de développement. C'est un conseil paranoïaque, mais il faudrait être très prudent, même si vous étiez autorisé – MS SQLSERVER jargon ici – une seconde instance sur le même server.

Je peux recharger notre base de test à volonté, et c'est pourquoi nous avons un système de test. Notre système de production contient les paiements d'impôts des citoyens et d'autres informations qui ne peuvent pas être endommagées, "ou autrement".

Pour nos changements de données de production, nous nous assurons toujours que nous utilisons un BEGIN TRAN et un ROLLBACK TRAN et que toutes les instructions ont une clause OUTPUT . De cette façon, nous pouvons d'abord exécuter le script (généralement dans une copy de PRODUCTION db en premier) et voir ce qui est affecté avant de changer le ROLLBACK TRAN en COMMIT TRAN