Quelles sont les meilleures pratiques pour garantir que votre SQL peut être exécuté de manière répétée sans recevoir d'erreurs lors des exécutions suivantes?Scripts SQL Server réactivables
par exemple.
- vérifier que les tables ne sont pas déjà avant de les créer
- vérifier que les colonnes ne sont pas déjà avant de créer ou renommer
- transactions avec rollback en cas d'erreur
- Si vous laissez tomber les tables qui existent avant en les créant à nouveau, abandonnez d'abord leurs dépendances, et n'oubliez pas de les recréer après
- En utilisant CREATE OR ALTER PROCEDURE au lieu de CREATE PROCEDURE ou ALTER PROCEDURE si votre saveur de SQL le supporte
- Maintenir un schéma de gestion de version interne, de sorte que le même SQL ne soit pas exécuté deux fois en premier lieu. De cette façon, vous savez toujours où vous en êtes en regardant le numéro de version.
Exportez les données existantes vers les instructions INSERT et recréez complètement la base de données entière à partir de zéro.
suppression de tables avant de les créer (pas la chose la plus sûre jamais, mais fonctionnera dans un pincement si vous savez ce que vous faites)
modifier: Je cherchais quelque chose comme ceci:
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[foo]')
AND OBJECTPROPERTY(object_id, N'IsUserTable') = 1)
DROP TABLE foo
Est-ce que d'autres utilisent des instructions comme celle-ci ou quelque chose de mieux?
modifier: J'aime la suggestion de Jhonny:
IF OBJECT_ID('table_name') IS NOT NULL DROP TABLE table_name
Je le fais pour les colonnes en ajoutant:
IF NOT EXISTS (SELECT *
FROM SYSCOLUMNS sc
WHERE EXISTS (SELECT id
FROM [dbo].[sysobjects]
WHERE NAME LIKE 'TableName'
AND sc.id = id)
AND sc.name = 'ColumnName')
ALTER TABLE [dbo].[TableName] ADD [ColumnName]
je supprimer la suppression de tables avant de les créer. Vous ne voudriez pas supprimer des tables contenant des données! –
D'accord, ce n'est probablement pas la chose la plus sûre à faire. J'essayais juste de faire avancer le genre de réponses que je cherchais. –