3.122 messaggi dal 16 maggio 2002
Ecco una domanda per gli esperti di mySQL. Come posso, con un'unica query sql (no script, no cursori) eliminare tutte le tabelle di un database? Non posso dare il comando DROP DATABASE.
Ho visto che con SHOW TABLES ottengo l'elenco delle tabelle, ma sebbene abbia provato anche con
DROP TABLE (SHOW TABLES)

non risolvo. Esiste una query che mi permetta di fare ciò?

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
823 messaggi dal 05 agosto 2002
A te servirebbe una stored procedure e probabilmente una gestione migliore dei metadati in MySQL, in modo da recuperare i nomi delle tabelle con una semplice select.
Probabilmente il modo migliore per fare quello che vuoi è costruirti uno script sql che faccia il tutto. Da un elenco delle tabelle è facile ottenere (con un po' di copia e incolla e/o trova - sostituisci) una serie di "drop table xxx".

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!
61 messaggi dal 23 giugno 2004
Non credo si possa fare con un'unica query. SHOW TABLES non ti serve, piuttosto ti serve l'elenco delle tabelle separate da virgole. Ti può venire in aiuto il metodo OpenSchema dell'oggetto Connection. Attraverso questo metodo puoi ricavare l'elenco delle tabelle per darlo come parametro a una successiva query

Per esempio (uso una sintassi JS)

<%

Rs=Rs.ActiveConnection.OpenSchema(20);
var Tables= "";

 while ( !Rs.EOF) { 
  Tables+=(Rs("TABLE_NAME"));
  Rs.MoveNext();
  Tables+=(Rs.EOF?'':',');
}
Rs.Close();

%>



a questo punto la variabile Tables contiene ciò che ti serve. Basta fare

"DROP TABLE"+ Tables;
Per cancellare tutto

Il parametro 20 dato alla OpenSchema corrisponde al tipo di query per ottenere informazioni sulle tabelle. E' possibile inserire altri valori, ad esempio 4 corrisponde al tipo per ottenere informazioni sulle colonne di una tabella.
Ciao
Modificato da franzescu il 14 luglio 2004 11.34 -
3.122 messaggi dal 16 maggio 2002
Alla fine ho risolto con uno script, ho fatto prima. Sto sviluppando in php, lo riporto qui di seguito se a qualcuno dovesse servire:
<?
$conn = mysql_connect("localhost", "username", "password");
if ($conn <= 0) die("Errore nella connessione");
$res = mysql_select_db("nomedb", $conn);
if ($res == false) die("Errore nella selezione del db");
$res = mysql_query("SHOW TABLES");
while($tab = mysql_fetch_array($res))
  mysql_query("DROP TABLE " . $tab[0]);
mysql_free_result($res);
mysql_close($conn);
?>

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
823 messaggi dal 05 agosto 2002
Sono anche io convinto che la cosa più semplice sia uno script tipo il tuo, su altri db (diciamo "+ seri") il dba si sarebbe preparato una stored procedure apposta o avrebbe usato uno script sql (ma è proprio una cosa UNIX  ).

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.