Bonjour,

Sous sql server 2008, je souhaite automatiser la suppression de certaines table ne commençant pas par 'SAVE' en SQL.

Je souhaite tester si la suppression des 20 tables se passe bien si c'est le cas j'applique la suppression de toutes les tables sinon je souhaite qu'aucune table ne soient supprimées.

Et je souhaite ne plus enregistrer dans une table les tables supprimées.

A priori je pense utilisé TRY CATCH et MSforeachtabl. Mais je ne sais pas si la condition : l'ensemble des tables sont supprimé ou aucune si ça se passe mal est remplie.

Je souhaite également que le code soit optimisé. J'ai fait rapisement le code suivant qui me parait très lourd.

Si quelqu'un a une idée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
BEGIN TRY
BEGIN TRANSACTION;
 
 
EXEC @DatabaseName.sys.sp_MSforeachtable ' IF PARSENAME(''?'', 3) NOT IN (''bd1'',''bd2'') AND OBJECT_NAME(''?'') NOT LIKE ('SAVE%')
BEGIN
 
INSERT TABLE DROP_TABLE (database_name, table_id, table_name, row_count)
VALUES (PARSENAME(''?'', 3),OBJECT_ID(''?''),OBJECT_NAME(''?''), SELECT(count(*) FROM (''?'')))
 
DROP TABLE @DatabaseName.dbo.?
 
END'
COMMIT TRANSACTION;
 
 
END TRY
BEGIN CATCH
 
SET @error = 1
@vErrorNumber = ERROR_NUMBER() AS ErrorNumber,
@vErrorSeverity = ERROR_SEVERITY() AS ErrorSeverity,
@vErrorState = ERROR_STATE() as ErrorState,
@vErrorProcedure = ERROR_PROCEDURE() as ErrorProcedure,
@vErrorLine = ERROR_LINE() as ErrorLine,
@vErrorMessage = ERROR_MESSAGE() as ErrorMessage;
 
ROLLBACK TRANSACTION;
 
 
END CATCH