Il arrive de vouloir supprimer certaines tables dans une base, mais sans forcément dropper toute la base.
En se basant sur les tables système il est rapidement facile de supprimer les tables d’un schéma.
Une requête TSQL et c’est parti …
[fusion_builder_container hundred_percent= »yes » overflow= »visible »][fusion_builder_row][fusion_builder_column type= »1_1″ background_position= »left top » background_color= » » border_size= » » border_color= » » border_style= »solid » spacing= »yes » background_image= » » background_repeat= »no-repeat » padding= » » margin_top= »0px » margin_bottom= »0px » class= » » id= » » animation_type= » » animation_speed= »0.3″ animation_direction= »left » hide_on_mobile= »no » center_content= »no » min_height= »none »][sql]
— =============================================
— Author: Djo
— Create date: 28 mars 2012
— Description: Permet de supprimer toutes les tables d’une base sous SQLSERVER
— =============================================
DECLARE @requete VARCHAR(MAX), @nomSchema VARCHAR(MAX), @nomTable VARCHAR(MAX)
DECLARE supprimToutesLesTablesDeLaBase CURSOR FOR
SELECT tab.name as nomTable
,sch.name as nomSchema
FROM sys.tables as tab
INNER JOIN sys.schemas as sch ON tab.schema_id = sch.schema_id
WHERE type = ‘U’ AND sch.name <> ‘DBO’
OPEN supprimToutesLesTablesDeLaBase
FETCH NEXT FROM supprimToutesLesTablesDeLaBase INTO @nomTable, @nomSchema
WHILE(@@FETCH_STATUS = 0)
BEGIN
SET @requete = ‘DROP TABLE ‘ + @nomSchema + ‘.’ + @nomTable
EXEC (@requete)
FETCH NEXT FROM supprimToutesLesTablesDeLaBase INTO @nomTable, @nomSchema
END
CLOSE supprimToutesLesTablesDeLaBase
DEALLOCATE supprimToutesLesTablesDeLaBase
[/sql][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]