Voici comment, dans la même instruction, supprimer plusieurs procédures stockées ou tables …
Supposons que nous voulons supprimer quatre tables dont les noms sont :
– Client
– Client_Commande
– Client_Livraison
– Livraison
On peut écrire :
1 2 3 4 5 6 7 8 9 10 11 | --------------------------------- -- Nicolas SOUQUET - 08/06/2009 - --------------------------------- DROP TABLE dbo.Client GO DROP TABLE dbo.Client_Commande GO DROP TABLE dbo.Client_Livraison GO DROP TABLE dbo.Livraison GO |
Et dès lors si l’on veut supprimer un jeu de procédures stockées correspondant à certains critères, on se voir obligé d’écrire :
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 | --------------------------------- -- Nicolas SOUQUET - 08/06/2009 - --------------------------------- DECLARE curProcedures CURSOR FOR SELECT name FROM sys.procedures WHERE name LIKE '%client%' OR name LIKE '%livraison%' FOR READ ONLY DECLARE @nomProc SYSNAME, @SQL VARCHAR(128) OPEN curProcedures FETCH NEXT FROM curProcedures INTO @nomProc WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL = 'DROP PROCEDURE dbo.' + @nomProc PRINT @nomProc EXEC (@SQL) FETCH NEXT FROM curProcedures INTO @nomProc END DEALLOCATE curProcedures |
Mais la syntaxe suivante est aussi valable :
1 2 3 4 | --------------------------------- -- Nicolas SOUQUET - 08/06/2009 - --------------------------------- DROP TABLE dbo.Client, dbo.Client_Commande, dbo.Client_Livraison, dbo.Livraison |
Et on peut alors écrire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | --------------------------------- -- Nicolas SOUQUET - 08/06/2009 - --------------------------------- DECLARE @SQL NVARCHAR(2048), @separateur NCHAR(6) SET @separateur = N', dbo.' SELECT @SQL = ISNULL(@SQL, '') + name + @separateur FROM sys.procedures WHERE name LIKE '%client%' OR name LIKE '%livraison%' SELECT @SQL = 'DROP PROCEDURE ' + LEFT(@SQL, LEN(@SQL) - LEN(@separateur)) PRINT @SQL EXEC (@SQL) |
ElSuket