[SQL / MS SQL] Inhoud ALLE tabellen deleten

Pagina: 1
Acties:
  • 235 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Is het mogelijk om van alle tabellen in een database de inhoud te verwijderen, dus alleen de data en niet structuur. Het gaat om een MS SQL server, dus het kan via SQL query's of via de Enterprise Manager.

Alavast bedankt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-06 16:03

dusty

Celebrate Life!

Delete from [tabelnaam] where 1=1

En dat dus voor elke tabel apart.

[ Edit: ik kan html posten dus ik kan kleiner dan teken NIET gebruiken :+ ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Anoniem: 33628

ff een stored procedure bouwen die al je tabellen van de db langs loopt en dan een DELETE FROM tablename laat uitvoeren..

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 14:31 schreef dusty het volgende:
Delete * from <tabelnaam> where 1=1

En dat dus voor elke tabel apart.
Ik heb een stuk of 50 tabellen, moet ik elk tabel naam apart invoeren (RSI opwekkend?) of een programma gaan schrijven speciaal voor deze taak?

Het kan toch simpeler neem ik aan, deze 'oplossing' had ik ook wel kunnen bedenken en hij werkt al niet meer goed zodra er een nieuwe table bij komt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 14:32 schreef r-e-m het volgende:
ff een stored procedure bouwen die al je tabellen van de db langs loopt en dan een DELETE FROM tablename laat uitvoeren..
Dat klinkt beter, maar wat is de code van die stor. procedure. Heb daar minimale ervaring mee, weet alleen hoe ik ze moet aanmaken.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20-06 23:43

Janoz

Moderator Devschuur®

!litemod

Op woensdag 06 februari 2002 14:31 schreef dusty het volgende:
Delete from [tabelnaam] where 1=1

En dat dus voor elke tabel apart.

[ Edit: ik kan html posten dus ik kan kleiner dan teken NIET gebruiken :+ ]
Ik dacht dat jij wel slim genoeg was om dan < (of > of &) te gebruiken :P.



Back ontopic...

ALs je nu gewoon een lijstje met de tabellen kunt genereren, kun je deze in een editor plakken en met bv zoek/vervang functies er "DELETE FROM " voor en " WHERE 1=1;" achter te zetten.Vervolgens plak je dit in het window waarin je queries uit kunt voeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Heb dit wel eens gemaakt, gewoon ff een select doen op Sysobjects daar haal je de tables op en vervolgens via cursor een delete statement geven. Kans is groot dat je hem paar keer moet runnen omdat anders je constraints op hun bek gaan :)

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 14:36 schreef raptorix het volgende:
Heb dit wel eens gemaakt, gewoon ff een select doen op Sysobjects daar haal je de tables op en vervolgens via cursor een delete statement geven. Kans is groot dat je hem paar keer moet runnen omdat anders je constraints op hun bek gaan :)
Uuhmm, dat kan wel es kloppen, maar zolang je de goede volgorde aan houd? Maar da's weer een ander probleem.

Heb jij misschien de code voor zo'n stored procedure.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-06 16:03

dusty

Celebrate Life!

Op woensdag 06 februari 2002 14:34 schreef Janoz het volgende:

[..]

Ik dacht dat jij wel slim genoeg was om dan [..]te gebruiken :P.
dat is leuk tot iemand mij quote, dan krijg je die tekst weer te zien :+
Back ontopic...

ALs je nu gewoon een lijstje met de tabellen kunt genereren, kun je deze in een editor plakken en met bv zoek/vervang functies er "DELETE FROM " voor en " WHERE 1=1;" achter te zetten.Vervolgens plak je dit in het window waarin je queries uit kunt voeren.
Je bedoelt:
code:
1
2
3
select
  "DELETE FROM "|| TNAME ||" WHERE 1=1" 
from TAB

? (alhans voor oracle :+ )

En dan kopieer je de output en die voer je weer uit op de database ;)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op woensdag 06 februari 2002 14:41 schreef jelmervos het volgende:

[..]

Uuhmm, dat kan wel es kloppen, maar zolang je de goede volgorde aan houd? Maar da's weer een ander probleem.

Heb jij misschien de code voor zo'n stored procedure.
Kijk eens op www.swynk.com bij sql scripts, had al snel ff gekeken of ie er bij stond, dacht het niet maar als je ff kijkt heb je zo iets wat er op lijkt.

Acties:
  • 0 Henk 'm!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 20-06 14:08

Crazy D

I think we should take a look.

Op woensdag 06 februari 2002 14:41 schreef jelmervos het volgende:
Heb jij misschien de code voor zo'n stored procedure.
Ik niet, maar met books online (de fm ja :P) moet je er wel uit kunnen komen, CREATE PROCEDURE voor de stored proc, en DECLARE CURSOR voor een (vind ik) duidelijk voorbeeld van met cursors werken. Heb 'm ff niet bij de hand dus kan 't niet ff copy-pasten...
En met de storec proc sp_executesql kun je een dynamisch opgebouwde query executen.

Exact expert nodig?


Acties:
  • 0 Henk 'm!

Anoniem: 33628

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
declare @Table       varchar(128)
declare @Statement    nvarchar(128)

SET NOCOUNT ON

DECLARE UserCur INSENSITIVE CURSOR FOR

    select name from sysobjects where type = 'U' 

FOR READ ONLY

OPEN UserCur

FETCH NEXT FROM UserCur INTO

    @Table

WHILE (@@FETCH_STATUS <> -1)
BEGIN

    SET @Statement = N'DELETE FROM ' +  convert(nvarchar(128),@Table) 
    exec sp_executesql @Statement

    FETCH NEXT FROM UserCur INTO

        @Table

END

DEALLOCATE  UserCur

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 14:45 schreef raptorix het volgende:

[..]

Kijk eens op www.swynk.com bij sql scripts, had al snel ff gekeken of ie er bij stond, dacht het niet maar als je ff kijkt heb je zo iets wat er op lijkt.
Bedankt:
Clear Tables Script
By Alexander Kondakov - Published December 12, 2001

This simple script will quickly and easily remove all data from all user tables. The script will work on SQL Server 6.x, 7.x, and 2000.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
At your service!

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-06 16:03

dusty

Celebrate Life!

Op woensdag 06 februari 2002 14:50 schreef raptorix het volgende:
At your service!
Persoonlijk vindt ik het een "slechte" oplossing. Als het goed is heb je een bestand met alle definities van je tabellen e.d. Dan kan je beter je "installatie" bestand uitvoeren, waardoor alle tabellen worden gedropped en weer netjes alle tabellen worden aangemaakt.

Maar dat is mijn persoonlijke mening natuurlijk ;)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op woensdag 06 februari 2002 15:01 schreef dusty het volgende:

[..]

Persoonlijk vindt ik het een "slechte" oplossing. Als het goed is heb je een bestand met alle definities van je tabellen e.d. Dan kan je beter je "installatie" bestand uitvoeren, waardoor alle tabellen worden gedropped en weer netjes alle tabellen worden aangemaakt.

Maar dat is mijn persoonlijke mening natuurlijk ;)
Klopt maar vaak worden dit soort bestanden pas na het project gemaakt :Y)

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 15:01 schreef dusty het volgende:

[..]
Wat bedoel je precies met installatie bestand?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op woensdag 06 februari 2002 15:12 schreef jelmervos het volgende:

[..]

Wat bedoel je precies met installatie bestand?
Een create DB script denk ik :)

Acties:
  • 0 Henk 'm!

Anoniem: 7195

wanneer je tabellen leeg wilt gooien, NIET DELETE gebruiken maar TRUNCATE. DELETE voegt nl. bij elke row die wordt verwijderd een record toe aan de transaction log. Omdat je toch alles wilt wegkieperen is TRUNCATE beter (en ook stukken rapper) die de table cleart zonder transactionlog entries.

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Aha, oke. Maar hij komt toch met error's over "FOREIGN KEY constraint", is er niet een betere/snellere manier om alle data uit de DB te halen.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

Anoniem: 12510

Als je je CREATE definities nog hebt liggen zou ik gewoon DROP DATABASE doen en dan de tabellen opnieuw aanmaken.

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 15:48 schreef Bnard het volgende:
Als je je CREATE definities nog hebt liggen zou ik gewoon DROP DATABASE doen en dan de tabellen opnieuw aanmaken.
Heb ik niet, dus eerst alles handmatig verwijderen, backup maken (script?) en dan bij de volgende keer die terug zetten.

Ik vind het vreemd dat er niet een betere manier is, dit is toch niet zo vreemd.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op woensdag 06 februari 2002 15:46 schreef jelmervos het volgende:
Aha, oke. Maar hij komt toch met error's over "FOREIGN KEY constraint", is er niet een betere/snellere manier om alle data uit de DB te halen.
Om het in goede volgorde te doen :)

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-06 16:03

dusty

Celebrate Life!

Op woensdag 06 februari 2002 15:14 schreef raptorix het volgende:
[..]
Een create DB script denk ik :)
Yup.

script uitvoeren, alle tabellen worden in de juiste volgorde verwijderd, daarna in de juiste volgorde weer gecreerd :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 15:49 schreef raptorix het volgende:

[..]

Om het in goede volgorde te doen :)
Uuhmm, wat is de goede volgorde? :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 06 februari 2002 15:50 schreef dusty het volgende:

[..]

Yup.

script uitvoeren, alle tabellen worden in de juiste volgorde verwijderd, daarna in de juiste volgorde weer gecreerd :)
Hoe maak ik zo'n script?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Overigens is mijn ervaring dat Sqlserver niet helemaal goede volgorde hanteert bij het creeeren van een script, opzich werkt het wel als je paar keer runt, maar meestal kan je beter gewoon zelf even het script maken, op zich niet heel moeilijk over algemeen questie van wat copy/pasten in juiste volgorde.

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-06 16:03

dusty

Celebrate Life!

Op woensdag 06 februari 2002 15:57 schreef raptorix het volgende:
Overigens is mijn ervaring dat Sqlserver niet helemaal goede volgorde hanteert bij het creeeren van een script, [...]
Kan dat dan automatisch? :+

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-06 16:03

dusty

Celebrate Life!

Op woensdag 06 februari 2002 15:51 schreef jelmervos het volgende:
[..]
Hoe maak ik zo'n script?
zie:
Ik heb een stuk of 50 tabellen, moet ik elk tabel naam apart invoeren (RSI opwekkend?) of een programma gaan schrijven speciaal voor deze taak?
Een keer RSI krijgen dus ;)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
uuhmm, lekker is dat.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op woensdag 06 februari 2002 15:57 schreef raptorix het volgende:
Overigens is mijn ervaring dat Sqlserver niet helemaal goede volgorde hanteert bij het creeeren van een script, opzich werkt het wel als je paar keer runt, maar meestal kan je beter gewoon zelf even het script maken, op zich niet heel moeilijk over algemeen questie van wat copy/pasten in juiste volgorde.
hmm, bij het creeeren van scripts ben ik daar eigenlijk nog nooit tegenaan gelopen. Objecten en data overpompen wil nog wel eens fout gaan, maar ook daar is dat 9 van de 10 keer omdat ik zelf een stomme fout maak :o

Dus gewoon van al je tabellen scripts laten maken in de EM en eventueel nog even voor de zekerheid nalopen (iig zorgen dat je "alter table"-s na de "create table"-s komen) en dan moet het werken.

btw. wat lees ik allemaal over het rechtstreeks query-en van de system tables? Foei ;) daar zijn de INFORMATION_SCHEMA views voor.

Today's subliminal thought is:


Acties:
  • 0 Henk 'm!

Anoniem: 12510

Uuhmm, wat is de goede volgorde?
Nou, je moet het in zo'n volgorde doen dat de foreign keys goed gaan. Als je een tabel creditcards hebt met een foreign key naar een tabel klanten, dan moet je eerst de tabel klanten aanmaken voor je de tabel creditcards aanmaakt. Anders kan hij die externe referentie niet leggen.

Als je goed naar de afhankelijkheden in je tabellen kijkt is er wel uit te komen. Succes ermee.
Pagina: 1