2010-09-18 5 views

ответ

7

попробовать что-то вроде этого:

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE] 

Аккуратный маленький трюк, и это работает для меня.

Первоначально предложенный here.

+0

Обратите внимание, что это должен быть запущен из командной строки системы, а не как заявление MySQL. – Mchl

+0

Я могу запускать только операторы mysql, поэтому я думаю, что это не работает. – aneuryzm

0

Попробуйте это:

SELECT name INTO #tables from sys.objects where type = 'U' 
while (SELECT count(1) FROM #tables) > 0 
begin 
declare @sql varchar(max) 
declare @tbl varchar(255) 
SELECT top 1 @tbl = name FROM #tables 
SET @sql = 'drop table ' + @tbl 
exec(@sql) 
DELETE FROM #tables where name = @tbl 
end 
DROP TABLE #tables; 

получил от этого here. Быстро и грязно, говорит он. Это, конечно, грязно. ;-)

+0

не работает. Он говорит об ошибке синтаксиса. Я думаю, из-за: & gt; 0 – aneuryzm

+0

Скорее всего потому, что это не MySQL. Подобная процедура может быть создана в MySQL, используя information.schema вместо sys.objects (и, конечно, совместимый с MySQL синтаксис для переменных) – Mchl

0

Вот пример, но для MS SQL Server:

USE myBD -- user DB 

DECLARE tables_cursor CURSOR 
FOR SELECT name FROM sys.objects WHERE type = 'U' --carefull here 

OPEN tables_cursor 
DECLARE @tablename sysname 

FETCH NEXT FROM tables_cursor INTO @tablename 
WHILE (@@FETCH_STATUS != -1) 
BEGIN 
EXEC ('DROP TABLE ' + @tablename) 
FETCH NEXT FROM tables_cursor INTO @tablename 
END 

DEALLOCATE tables_cursor 
Смежные вопросы