Vra

Is daar'n eenvoudige manier om te val'n groep van verwante tabelle in SQL Server?Ideaal gesproke ek wil graag om te vermy om te bekommer oor watter volgorde hulle laat val in, want ek weet die hele groep sal weg wees teen die einde van die proses.

Was dit nuttig?

Oplossing

By die risiko van klinkende dom, glo ek nie SQL Server ondersteun die verwydering / waterval sintaksis. Ek dink jy kan 'n delete reël instel na waterval uitvee doen ( http: // MSDN .microsoft.com / af-ons / library / ms152507.aspx ), maar sover ek weet die truuk met SQL Server is om net jou druppel navraag keer hardloop vir elke tafel wat jy laat val, dan check dit het gewerk.

Ander wenke

'n diferent benadering kan: eerste ontslae te raak van die beperkinge, dan daal die tafels in 'n enkele skoot.

Met ander woorde, 'n druppel beperking vir elke dwang, dan 'n druppel TABEL vir elke tafel; op hierdie punt aan die orde van die uitvoering nie 'n probleem behoort te wees.

Dit vereis die sp___drop___beperkings script wat jy kan vind op die Databasis Journal:

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?"
GO
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?"
GO

NOTA dit - natuurlik - as jy bedoel om ALMAL te laat val van die tabelle in die databasis, so wees versigtig

Ek het nie toegang tot SQL Server moet hierdie toets, maar hoe oor:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE;

Ek is nie seker nie, as Derek se benadering werk. Jy het dit nog nie te merk as beste antwoord.

Indien nie: met SQL Server 2005 is dit moontlik moet wees, dink ek
. Daar bekendgestel hulle uitsonderings (wat ek nog gebruik het). So val die tafel, vang die uitsondering, as 'n mens kom en probeer die volgende tabel totdat hulle almal weg.
Jy kan die lys van tabelle stoor in 'n tydelike-tafel en gebruik 'n muis om dit te verken, as jy wil.

Ek het uiteindelik met behulp van Apache se ddlutils uit te voer die val vir my, wat gesorteer dit in my geval, al is'n oplossing wat gewerk het slegs binne sql server sou word nogal'n bietjie makliker.

@Derek Park, ek het nie geweet jy kan komma aparte tafels is daar, so dit is handig, maar dit lyk nie te werk nogal soos verwag.Onderste AS BESTAAN of WATERVAL is erken deur sql server blyk dit, en loop drop table X, Y, Z blyk te werk net as hulle moet laat val word in die genoemde volgorde.

Sien ook http://msdn.microsoft.com/en-us/library/ms173790.aspx, wat beskryf die daling tafel sintaksis.

Die ding wat jou terughou van die val van die tafels in 'n bevel is vreemde sleutel afhanklikhede tussen die tafels. So ontslae te raak van die SK's voordat jy begin.

  1. Die gebruik van die menings INFORMATION_SCHEMA stelsel, haal 'n lys van al vreemde sleutels wat verband hou met enige van hierdie tabelle
  2. Drop elk van hierdie vreemde sleutels
  3. Nou moet jy in staat wees om al die tafels te laat val, met behulp van 'n bevel wat jy wil.
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top