MySQL DROP всі таблиці, ігноруючи сторонні ключі


403

Чи є приємний простий спосіб скинути всі таблиці з бази даних MySQL, ігноруючи будь-які обмеження зовнішніх ключів, які можуть бути там?


1
Якщо у вас є безліч інших утворень, чому б не просто ЗРОБИТИ ДАТАБАЗУ і почати з нуля?
StuartLC

161
Щоб зберегти привілеї користувачів.
bcmcfc

5
Я щойно зрозумів, що тим часом ви отримали відповідь від Діона Трутера, яка є більш повною, ніж моя, і пропонуєте це прийняти замість цього. ( частина "скинути всі таблиці" не покрита моєю)
chiccodoro

5
fyi, якщо у вас інстальовано phpMyAdmin, легко вибрати всі таблиці та опустити їх.
Користувач

1
Це правда, але лише для phpMyAdmin у версії 4.x. Якщо ви вибираєте всі таблиці та вибираєте Dropзі спадного меню, ви зніміть Foreign key checkпрапорець.
jmarceli

Відповіді:


474

Я вважаю, що генерований набір операторів drop є корисним, і рекомендую такі налаштування:

  1. Обмежте створені краплі у вашій базі даних так:
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

Примітка 1: Це не виконує операції DROP, воно просто дає вам список їх. Вам потрібно буде вирізати та вставити вихід у свій двигун SQL для їх виконання.

Примітка 2. Якщо у вас є VIEW, вам доведеться виправити кожне DROP TABLE `VIEW_NAME`твердження DROP VIEW `VIEW_NAME`вручну.

  1. Зауважте, за http://dev.mysql.com/doc/refman/5.5/uk/drop-table.html , скидання з каскаду є безглуздим / оманливим:

"RESTRICT і CASCADE дозволяють полегшити перенесення. У MySQL 5.5 вони нічого не роблять."

Тому для того, щоб заяви про падіння працювали, якщо вам потрібно:

SET FOREIGN_KEY_CHECKS = 0

Це відключить перевірку референтності цілісності - тому, коли ви закінчите виконувати необхідні краплі, вам потрібно буде скинути перевірку ключів

SET FOREIGN_KEY_CHECKS = 1
  1. Остаточне виконання повинно виглядати так:
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

Примітка: простіше використовувати вихід SELECT, може допомогти параметр mysql -B.


6
@Timmm: Я написав 3 краплі у своїй відповіді - однак це теж не виконує їх. Вам потрібно скопіювати їх із Stackoverflow та вставити їх у свою MySQL Workbench або куди завгодно. З обраним вище ви отримуєте всі відповідні краплі "безкоштовно". Вам просто потрібно скопіювати їх і вставити.
чікодоро

3
Так, я знаю, але я хотів використовувати це в сценарії. Те, що я закінчила насправді, - DROP DATABASE foo; CREATE DATABASE foo;це не зовсім те саме, але працювало для мене.
Тиммммм

2
Не зручно, коли є сотні таблиць, але краще, ніж нічого, якщо відтворення бази даних - це не варіант.
Ніколя Рауль

2
@Timmmm: Переглядаючи це ще раз - ви праві, це не відповідає повністю на питання. Відповідь Жана виглядає багатообіцяючою - вона і автоматично генерує оператори DROP, і виконує їх, при цьому правильно застосовуючи SET FOREIGN_KEY_CHECKS до і після.
чікодоро

1
використовуйте термінал, якщо ви перебуваєте в Linux або mac, і він буде працювати для входу у ваш тип акаунта mysql: mysql -u <username> -p, тоді натисніть клавішу, введіть зараз, введіть вам пароль вибору бази даних, а потім напишіть наведений вище код для видалення таблиць
ismnoiet

132

Від http://www.devdaily.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys :

SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;

(Зауважте, що це відповідає на те, як відключити перевірку зовнішніх ключів, щоб мати змогу скидати таблиці у довільному порядку. Це не відповідає, як автоматично генерувати оператори випадаючої таблиці для всіх існуючих таблиць та виконувати їх в одному сценарії. Відповідь Жана робить.)


10
Якщо ви використовуєте MySQL Workbench, ви можете уникнути необхідності вводити всі назви таблиць, вибравши всі таблиці в лівому стовпчику, клацнувши правою кнопкою миші, а потім опцією "скидання таблиць". ІТ генерує SQL, який ви можете скопіювати та вставити між оператором SET FOREGIN_KEY_CHECKS - можливо, подібним також і в інших графічних інтерфейсах.
chris

дякую корисно, і @chris супер корисний, слід додати відповідь
Андрій

97

Ось збережена процедура SurlyDre змінена таким чином, що сторонні ключі ігноруються:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    SET FOREIGN_KEY_CHECKS = 0;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
        PREPARE stmt1 FROM @stmt_sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;

2
Працює над таблицями, не видаляє представлення даних. І все-таки скоротив моє друкування масово :) thx.
chrisinmtown

Через 7 років я б сказав, що вам слід обернути _tableNameзворотні цитати. В іншому випадку це не вдасться на деяких таблицях, як-от groupабо в інших ключових словах.
sashaaero

Подбайте про погляди! ВИБІРТЕ ім'я таблиці ВІД інформації_схеми. ТАБЛИЦІ, ЩО table_schema = SCHEMA () AND table_type = "BASE TABLE";
laurent belloeil

42

кожен вищезазначений підхід включає набагато більше роботи, ніж цей AFAICT ...

( mysqldump --add-drop-table --no-data -u root -p database | grep 'DROP TABLE' ) > ./drop_all_tables.sql
mysql -u root -p database < ./drop_all_tables.sql

2
чому б не просто mysqldumpпередати mysql, не проходячи файл?
Рольф

2
@Rolf немає особливих причин. Вибийте себе.
SkyLeach

2
Спасибі, я вже зробив, зняли дужку і конвеєр mysqldumpв grepINTO mysql, він працює. Ще раз дякую за ваше рішення, це добре.
Рольф

5
Цьому не вистачає іноземних ключових обмежень; Тут я додав сценарій bash на основі вашої відповіді: gist.github.com/cweinberger/c3f2882f42db8bef9e605f094392468f
cweinberger

sooooooooooooo розумний!
zx1986

25

З цієї відповіді ,

виконати:

  use `dbName`; --your db name here
  SET FOREIGN_KEY_CHECKS = 0; 
  SET @tables = NULL;
  SET GROUP_CONCAT_MAX_LEN=32768;

  SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name, '`') INTO @tables
  FROM   information_schema.tables 
  WHERE  table_schema = (SELECT DATABASE());
  SELECT IFNULL(@tables, '') INTO @tables;

  SET        @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
  PREPARE    stmt FROM @tables;
  EXECUTE    stmt;
  DEALLOCATE PREPARE stmt;
  SET        FOREIGN_KEY_CHECKS = 1;

Це скидає таблиці з бази даних, яка зараз використовується. Ви можете встановити поточну базу даних за допомогою use.


Або в іншому випадку прийнята відповідь Діона простіша, за винятком того, що вам потрібно виконати її двічі, спочатку отримати запит, а вдруге виконати запит. Я надав кілька нерозумних зворотних тиків, щоб уникнути спеціальних символів у назвах db та таблиць.

  SELECT CONCAT('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;')
  FROM   information_schema.tables
  WHERE  table_schema = 'dbName'; --your db name here

Короткий і чистий розчин. Шлях краще, ніж процедура альтернатива.
Рафаель Ренан Пачеко

16

Ось рішення на основі курсору. Ніби довгий, але працює як єдиний пакет SQL:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
        PREPARE stmt1 FROM @stmt_sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;

END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;

2
Приємно, але він, на жаль, не обробляє сторонні ключі.
Timmmm

11

Ви можете зробити:

select concat('drop table if exists ', table_name, ' cascade;')
  from information_schema.tables;

Потім запустіть створені запити. Вони скинуть кожну окрему таблицю в поточній базі даних.

Ось допомога по drop tableкоманді.


Вищенаведена відповідь передбачає, що ||встановлений оператором конкатенації. Більш конкретно, режим MySQL SQL містить PIPES_AS_CONCAT. Довідка: dev.mysql.com/doc/refman/5.0/en/…
Ionuț G. Stan

@Ionut: круто! дякую, що вказали на це. Виправлено зразок коду, який потрібно використовувати concatзамість||
Пабло Санта-Крус,

9

Я придумав цю модифікацію на відповідь Діона Трутера, щоб полегшити роботу з багатьма таблицями:

SET GROUP_CONCAT_MAX_LEN = 10000000;
SELECT CONCAT('SET FOREIGN_KEY_CHECKS=0;\n', 
              GROUP_CONCAT(CONCAT('DROP TABLE IF EXISTS `', table_name, '`')
                           SEPARATOR ';\n'),
              ';\nSET FOREIGN_KEY_CHECKS=1;')
FROM information_schema.tables
WHERE table_schema = 'SchemaName';

Це повертає всю річ в одному полі, тому ви можете скопіювати один раз і видалити всі таблиці (використовуйте Copy Field Content (unquoted)в Workbench). Якщо у вас багато таблиць, ви можете встановити деякі обмеження наGROUP_CONCAT() . Якщо так, збільшити змінну max len (і max_allowed_packet, якщо потрібно).


SET GROUP_CONCAT_MAX_LEN був потрібним мені трюком. У мене був сценарій, який працював, але завжди виходив з ладу перший раз з усіченою назвою таблиці, а потім успішно закінчувався, коли запускався вдруге. Дякую!
dualmon

8

Гуглінг по темі завжди підводить мене до цього питання, так що тут працює код mysql, який видаляє ОСНОВНІ таблиці та види:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    SET FOREIGN_KEY_CHECKS = 0;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql1 = CONCAT('DROP TABLE IF EXISTS ', _tableName);
        SET @stmt_sql2 = CONCAT('DROP VIEW IF EXISTS ', _tableName);

        PREPARE stmt1 FROM @stmt_sql1;
        PREPARE stmt2 FROM @stmt_sql2;

        EXECUTE stmt1;
        EXECUTE stmt2;

        DEALLOCATE PREPARE stmt1;
        DEALLOCATE PREPARE stmt2;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables();

DROP PROCEDURE IF EXISTS `drop_all_tables`;

7

Один вкладиш для видалення всіх таблиць із заданої бази даних:

echo "DATABASE_NAME"| xargs -I{} sh -c "mysql -Nse 'show tables' {}| xargs -I[] mysql -e 'SET FOREIGN_KEY_CHECKS=0; drop table []' {}"

Якщо запустити це, випадете всі таблиці з бази даних DATABASE_NAME.

І приємно в цьому те, що ім’я бази даних пишеться явно лише один раз.


1
це працювало для мене, але мені довелося замінити -i на -i на macOS Висока Сьєрра
Алі Сельчук

1
Дякую @AliSelcuk І Ui-Uuntu працює для мене, і я зміню його на -I для того, щоб це працювало і для macOS.
мгершен

1
Дуже корисно, дякую! Мені довелося передати пароль, використовуючи -pPASSWORD (пробілу між -p та PASSWORD) обом командам mysql
Майк,

6

Ось автоматизований спосіб зробити це за допомогою сценарію bash:

host=$1
dbName=$2
user=$3
password=$4

if [ -z "$1" ]
then
    host="localhost"
fi

# drop all the tables in the database
for i in `mysql -h$host -u$user -p$password $dbName -e "show tables" | grep -v Tables_in` ; do  echo $i && mysql -h$host -u$user -p$password $dbName -e "SET FOREIGN_KEY_CHECKS = 0; drop table $i ; SET FOREIGN_KEY_CHECKS = 1" ; done

Дуже подобається це рішення, але я не бачу, як використовується змінна хост. Здається, він не використовується в жодному виклику mysql в циклі for.
Матвій Закшевський

1
Вибачте, пропустили його в команді, оновили.
kfox

5

Якщо в linux (або будь-якій іншій системі, яка підтримує трубопроводи, ехо та grep), ви можете зробити це одним рядком:

echo "SET FOREIGN_KEY_CHECKS = 0;" > temp.txt; \
mysqldump -u[USER] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP >> temp.txt; \
echo "SET FOREIGN_KEY_CHECKS = 1;" >> temp.txt; \
mysql -u[USER] -p[PASSWORD] [DATABASE] < temp.txt;

Я знаю, що це старе питання, але я думаю, що цей метод швидкий і простий.


2

У PHP це так просто, як:

$pdo = new PDO('mysql:dbname=YOURDB', 'root', 'root');

$pdo->exec('SET FOREIGN_KEY_CHECKS = 0');

$query = "SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
          FROM information_schema.tables
          WHERE table_schema = 'YOURDB'";

foreach($pdo->query($query) as $row) {
    $pdo->exec($row[0]);
}

$pdo->exec('SET FOREIGN_KEY_CHECKS = 1');

Просто не забудьте змінити YOURDB на ім'я вашої бази даних, і, очевидно, користувач / передати.


2

У оболонці Linux на зразок bash / zsh:

DATABASE_TO_EMPTY="your_db_name";
{ echo "SET FOREIGN_KEY_CHECKS = 0;" ; \
  mysql "$DATABASE_TO_EMPTY" --skip-column-names -e \
  "SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') \
   FROM information_schema.tables WHERE table_schema = '$DATABASE_TO_EMPTY';";\
  } | mysql "$DATABASE_TO_EMPTY"

Це згенерує команди, а потім негайно передасть їх другому клієнтському екземпляру, який видалить таблиці.

Розумний біт, звичайно, скопійований з інших відповідей тут - я просто хотів, щоб копіювально-вставний однокласник (ish) насправді зробити роботу, яку хотів ОП.

Зверніть увагу, звичайно, вам доведеться вводити свої дані (двічі) і в ці команди mysql, якщо у вас не дуже налаштована безпека. (або ви можете псевдонімом вашої команди mysql включити свої кредити.)


2

Просто поставте сюди корисний коментар Джонатана Ватта, щоб скинути всі таблиці

MYSQL="mysql -h HOST -u USERNAME -pPASSWORD DB_NAME"
$MYSQL -BNe "show tables" | awk '{print "set foreign_key_checks=0; drop table `" $1 "`;"}' | $MYSQL
unset MYSQL

Це допомагає мені, і я сподіваюся, що це може бути корисним


2

Видаліть усі таблиці з бази даних одним рядком з командного рядка:

mysqldump -u [user_name] -p[password] -h [host_name] --add-drop-table --no-data [database_name] | grep ^DROP | mysql -u [user_name] -p[password] -h [host_name] [database_name]

Там, де [ім’я користувача], [пароль], [ім’я_ хоста] та [ім'я_бази даних] повинні бути замінені реальними даними (користувач, пароль, ім’я хоста, ім'я бази даних).


1

Це досить стара публікація, але жодна з відповідей тут дійсно не відповіла на моє питання, тож сподіваюся, моя публікація допоможе людям!

Я знайшов це рішення в іншому питанні, яке дуже добре працює для мене:

mysql -Nse 'show tables' DB_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS=0; truncate table \`$table\`" DB_NAME; done

Це фактично спорожнить усі ваші таблиці в базі даних DB_NAME, а не лише відобразитьTRUNCATE командний рядок.

Сподіваюся, це допомагає!


Корисно, але насправді це не відповідає на питання.
jrosell

1

Спираючись на відповідь @Dion Truter та @Wade Williams, наступний скрипт оболонки скине всі таблиці, після того, як спочатку покаже, що він збирається запустити, і дасть вам можливість перервати за допомогою Ctrl-C.

#!/bin/bash

DB_HOST=xxx
DB_USERNAME=xxx
DB_PASSWORD=xxx
DB_NAME=xxx

CMD="mysql -sN -h ${DB_HOST} -u ${DB_USERNAME} -p${DB_PASSWORD} ${DB_NAME}"

# Generate the drop statements
TMPFILE=/tmp/drop-${RANDOM}.sql
echo 'SET FOREIGN_KEY_CHECKS = 0;' > ${TMPFILE}
${CMD} $@ >> ${TMPFILE} << ENDD
    SELECT concat('DROP TABLE IF EXISTS \`', table_name, '\`;')
    FROM information_schema.tables
    WHERE table_schema = '${DB_NAME}';
ENDD
echo 'SET FOREIGN_KEY_CHECKS = 1;' >> ${TMPFILE}

# Warn what we are about to do
echo
cat ${TMPFILE}
echo
echo "Press ENTER to proceed (or Ctrl-C to abort)."
read

# Run the SQL
echo "Dropping tables..."
${CMD} $@ < ${TMPFILE}
echo "Exit status is ${?}."
rm ${TMPFILE}

0

Це рішення засноване на відповіді @SkyLeach, але на підтримці скидання таблиць із зовнішніми ключами.

echo "SET FOREIGN_KEY_CHECKS = 0;" > ./drop_all_tables.sql
mysqldump --add-drop-table --no-data -u user -p dbname | grep 'DROP TABLE' >> ./drop_all_tables.sql
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./drop_all_tables.sql
mysql -u user -p dbname < ./drop_all_tables.sql


0

Просте і зрозуміле (можливо).

Це може бути не вигадливим рішенням, але це спрацювало і врятувало мені день.

Працював для версії сервера: 5.6.38 MySQL Community Server (GPL)

Кроки, які я дотримувався:

 1. generate drop query using concat and group_concat.
 2. use database
 3. disable key constraint check
 4. copy the query generated from step 1
 5. enable key constraint check
 6. run show table

Оболонка MySQL

mysql> SYSTEM CLEAR;
mysql> SELECT CONCAT('DROP TABLE IF EXISTS `', GROUP_CONCAT(table_name SEPARATOR '`, `'), '`;') AS dropquery FROM information_schema.tables WHERE table_schema = 'emall_duplicate';
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dropquery                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> USE emall_duplicate;
Database changed
mysql> SET FOREIGN_KEY_CHECKS = 0;                                                                                                                                                   Query OK, 0 rows affected (0.00 sec)

// copy and paste generated query from step 1
mysql> DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`;
Query OK, 0 rows affected (0.18 sec)

mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW tables;
Empty set (0.01 sec)

mysql> 

введіть тут опис зображення


-1

Я використовую наступне з сервером MSSQL:

if (DB_NAME() = 'YOUR_DATABASE') 
begin
    while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='FOREIGN KEY'))
    begin
         declare @sql nvarchar(2000)
         SELECT TOP 1 @sql=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
         FROM information_schema.table_constraints
         WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
         exec (@sql)
         PRINT @sql
    end

    while(exists(select 1 from INFORMATION_SCHEMA.TABLES))
    begin
         declare @sql2 nvarchar(2000)
         SELECT TOP 1 @sql2=('DROP TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']')
         FROM INFORMATION_SCHEMA.TABLES
        exec (@sql2)
        PRINT @sql2
    end
end
else
    print('Only run this script on the development server!!!!')

Замініть YOUR_DATABASE на ім'я вашої бази даних або видаліть увесь оператор IF (мені подобається додаткова безпека).


-7

Найкраще рішення для мене поки що

Виберіть База даних -> Клацніть правою кнопкою миші -> Завдання -> Створити сценарії - відкриється майстер для генерації сценаріїв. Вибравши об’єкти в наборі параметра Сценарій, натисніть кнопку Додатково . У розділі "Скрипт DROP і СТВОРИТИ" виберіть СРОП сценарію .

Запустити сценарій.


Це майже спрацювало, але я натиснув зелену кнопку перед синьою кнопкою, і я отримав коробку ліворуч, і натиснув скасувати, але потім я випив каву і забув про неї.
Рольф

Чи можете ви навіть пояснити, куди ви натиснули? Чи є для цього якийсь інструмент?
Ніко Хааз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.