2011-07-04 3 views
0

J'ai plus de 3000 tables dans ma base de données SQL 2008 avec des noms comme listés ci-dessous, qui commence par tempBinary_, que j'ai besoin de supprimer par programmation, comment faire cette? Je ne sais pas si je préfère la solution dans un script SQL ou avec l'utilisation de LINQtoSQL, je suppose que les deux sont bien.Supprimer toutes les tables avec un certain nom de préfixe dans une base de données SQL 2008

tempBinary_002c90322f4e492795a0b8a14e2f7c99 tempBinary_0039f7db05a9456f96eb3cd6a788225a tempBinary_0057da9ef0d84017b3d0bbcbfb934fb2

Je l'ai utilisé comme avant sur les colonnes, mais je ne sais pas si bon pour les noms de table aussi. Peut-être que quelque chose comme ça, où LIKE est utilisé, peut le faire? Je ne sais pas.

Use [dbo].[database_name] 
DROP TABLE table_name 
WHERE table_name LIKE 'tempBinary_%' 

Des idées?

+0

Je pense que la solution pourrait être proche de cette réponse. http://stackoverflow.com/questions/4424038/how-to-delete-all-tables-with-prefix-bkp-from-a-given-database – radbyx

+0

Impossible de le faire dans Linq2SQL, balise supprimée. – leppie

Répondre

2
declare @stmt varchar(max) = '' 
declare @tbl_name varchar(255) 


DECLARE tbl_cursor CURSOR FORWARD_ONLY READ_ONLY 
    FOR select name 
     from sysobjects 
     where xtype='u' and name like 'tempBinary%' 
OPEN tbl_cursor 
FETCH NEXT FROM tbl_cursor 
INTO @tbl_name; 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @stmt = @stmt + 'drop table ' + @tbl_name + ';' + CHAR(13) 


    FETCH NEXT FROM tbl_cursor 
    INTO @tbl_name 
end 
CLOSE tbl_cursor; 
DEALLOCATE tbl_cursor;  

execute sp_sqlexec @stmt 
+0

Que fait le 'CHAR (13)'? – radbyx

+0

retour chariot –

+0

si vous mettez une impression @stmt avant d'exécuter sp_sqlexec vous verrez les instructions de baisse ligne par ligne –

Questions connexes