Удалить базу данных в SQL Server, используя подстановочный знак - PullRequest
4 голосов
/ 23 июня 2010

У меня есть приложение, которое создает отдельную базу данных (SQL Server 2008) для каждого нового клиента, во время тестирования мы получаем множество баз данных, называемых PREFIX.wh независимо ...

Мне бы понравился скрипт, который бы искал все базы данных, начиная с PREFIX. и бросьте их, чтобы мы могли начать чистый цикл испытаний. Любая помощь с благодарностью.

Ответы [ 3 ]

14 голосов
/ 23 июня 2010
SELECT ' DROP DATABASE [' + NAME + ']' FROM sys.sysdatabases where name like 'PREFIX%'

Скопируйте вывод и выполните это, чтобы отбросить базы данных по вашим критериям.Вы также можете запланировать это на ежедневной основе с небольшой настройкой.

4 голосов
/ 19 июля 2010

Обновление:

Мы закончили тем, что расширили ответ от Baaju, поэтому я думал, что поделюсь им. Мы вызываем следующий скрипт из MSBuild, и он очищает все существующие БД, созданные во время тестирования:

use master

DECLARE @Name nvarchar(1000);

DECLARE testdb_cursor CURSOR FOR
SELECT 'ALTER DATABASE' + '[' + NAME + ']' + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE    DROP DATABASE ' + '[' + NAME + ']' FROM sys.sysdatabases where name like 'TCM.%'

OPEN testdb_cursor;

-- Perform the first fetch and store the value in a variable.
FETCH NEXT FROM testdb_cursor
INTO @Name;

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

   -- Concatenate and display the current values in the variables.
   exec sp_executesql @Name;

   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM testdb_cursor
   INTO @Name;
   END

CLOSE testdb_cursor;
DEALLOCATE testdb_cursor;
0 голосов
/ 17 августа 2018

Просто наткнулся на это и придумал небольшое изменение, чтобы разрешить немедленное выполнение без курсоров:

DECLARE @SQL NVARCHAR(MAX) = ''
SELECT @SQL = @SQL 
  + 'ALTER DATABASE [' + [name] + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; '
  + 'DROP DATABASE [' + [name] + ']; '
FROM sys.databases 
WHERE [name] like 'temp_%' AND create_date < DATEADD(day,-7,GETDATE())

-- display statements 
SELECT @SQL

-- execute (uncomment)
--EXEC sp_executesql @SQL 

Выше приведено удаление любых баз данных, начиная с "temp_" и старше 7 дней, но это можетбыть очевидно приспособленным к любой ситуации.

ОПАСНОСТЬ: Запутайте ваш запрос, удалите некоторые или все ваши базы данных.Я оставил комментарий EXEC закомментированным только для того, чтобы никто не делал это посредством копирования / вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...