1 votes

Suppression de bases de données dans SQL Server

Je dois supprimer les bases de données dont le nom commence par "In"...

J'ai essayé "Like" mais cela renvoie des erreurs de syntaxe...

J'ai essayé la commande suivante mais elle renvoie des erreurs de syntaxe pour "name"

SELECT 'DROP DATABASE ' + name + ';' from sys.databases where name like 'In%'

10voto

Rob Farley Points 9042

Que diriez-vous de :

DÉCLARER @qry nvarchar(max);

SÉLECTIONNER @qry = 
(SÉLECTIONNER 'SUPPRIMER LA BASE DE DONNÉES ' + name + '; ' 
DE sys.databases 
OÙ name LIKE 'In%'
FOR XML PATH(''));

EXEC sp_executesql @qry;

Rob

1voto

La syntaxe est

DROP DATABASE { nom_de_la_base_de_données | nom_de_la_snapshot_de_base_de_données } [ ,...n ] [;]

Il ne permet pas les caractères de remplacement (*) ni les clauses where. Vous devrez le faire manuellement ou de manière programmatique, en récupérant les noms des bases de données à partir de sys.databases.

0voto

devio Points 22981

Vous pouvez créer un CURSEUR qui boucle sur

SELECT name FROM sys.databases WHERE name LIKE 'ln%'

et à l'intérieur de la boucle vous créez la déclaration drop et l'exécutez

SET @s = 'DROP DATABASE ' + @name
EXEC (@s)

pas sûr que cela fonctionne, cependant, et je n'ai pas de bases de données à supprimer pour tester ceci ;)

0voto

Tuzo Points 14234

Vous pouvez créer une déclaration SQL pour générer un script pour vous:

SELECT 'DROP DATABASE ' + name + ';' from sys.databases where name like 'In%'

puis exécutez ce script.

Donc, si vous aviez deux bases de données InTestDB1 et InTestDB2, le résultat ci-dessus générerait les résultats suivants:

DROP DATABASE InTestDB1;
DROP DATABASE InTestDB2;

Vous pouvez ensuite enregistrer cela dans un fichier pour l'exécuter en tant que script sur un autre serveur ou le copier directement dans l'analyseur de requêtes pour l'exécuter immédiatement.

0voto

Dimi Toulakis Points 3002
UTILISER master;

DECLARE @Temp TABLE (Id INT IDENTITY(1, 1), name nvarchar(max));
DECLARE @RowCounter INT;

INSERT INTO @Temp
select name from sys.databases where name like N'In%';

SELECT @RowCounter = MAX(Id) FROM @Temp;

DECLARE @i INT;
SET @i = 1;

DECLARE @DBDeleteByName NVARCHAR(max);

WHILE @i <= @RowCounter
BEGIN
    ----- Construire la requête de suppression de la base de données.
    SELECT @DBDeleteByName = 'DROP DATABASE ' + name 
    FROM @Temp WHERE Id = @i;

    ----- Supprimer la base de données.
    EXEC sp_executesql @DBDeleteByName;

    ----- Incrémenter le compteur
    SET @i = @i + 1;

END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X