Avatar billede puppetmaster Nybegynder
12. september 2005 - 15:13 Der er 16 kommentarer og
1 løsning

Rense alle tabeller for data

Er der en (hurtig!) måde at rense samtlige user-tables i en database for data?
Jeg har importeret data fra en gammel Access database, bare for at kunne oprette grundstrukturen, men vil nu gerne have de "friske" data over i SQL Serveren.
Avatar billede teepee Nybegynder
12. september 2005 - 15:16 #1
Hvis du benytter DTS til at loade data kan du vælge at den skal slette eksisterende data først. Du kan endda også få den til at oprette tabellerne hvis du evt. sletter hele skemaet/databasen
Avatar billede puppetmaster Nybegynder
12. september 2005 - 15:25 #2
Ja, det tænkte jeg nok, første løsning har jeg brugt tidligere og anden løsning har jeg brugt her i testsammenhæng. Troede der var en
DELETE * FROM AllTables IN DATABASE MinDB
men åbenbart ikke
Avatar billede arne_v Ekspert
12. september 2005 - 19:43 #3
CREATE PROCEDURE GETTABLENAMES AS

DECLARE @name  VARCHAR(32)

DECLARE c CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

OPEN c

FETCH NEXT FROM c INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
      PRINT @name
      FETCH NEXT FROM c INTO @name
END

CLOSE c

DEALLOCATE c

GO
Avatar billede arne_v Ekspert
12. september 2005 - 19:43 #4
når det printer de rigtige tabelnavne så erstatter du'

PRINT @name

med

EXEC('DELETE FROM ' + @name)
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:04 #5
Lige den kode jeg har brug for, arne, kun 1 problem
Jeg får denne fejlmeddelelse:
Line 1: Incorrect syntax near 'Diverse'.

De fleste af mine tabeller består af navne med mellemrum i, hvordan skal proceduren omskrives så jeg ikke behøver rename mine tabeller?
Avatar billede arne_v Ekspert
13. september 2005 - 11:08 #6
EXEC('DELETE FROM [' + @name + ']')

vil jeg tro
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:11 #7
Right on! :)
Takker, smid et svar, Arne.
(for &#¤% hvor går det hurtigt med at slette dataene!)
Avatar billede arne_v Ekspert
13. september 2005 - 11:13 #8
svar
Avatar billede arne_v Ekspert
13. september 2005 - 11:15 #9
hvis du har rigtigt mange rækker i tabellerne så kunne det måske gå endnu hurtigere

TRUNCATE TABLE tabelnavn

sletter data uden at logge de enkelte rows i transaktions log
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:16 #10
:)
Det har jeg, sådan da, op til 88000 rækker.
Taker igen
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:17 #11
Hmmm...hvordan ser koden så ud? (prøvede, men fik en fejl)
Avatar billede arne_v Ekspert
13. september 2005 - 11:19 #12
EXEC('TRUNCATE TABLE [' + @name + ']')

men der er visse omstændigheder hvor du ikke kan gøre det
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:19 #13
Never mind, min fejl.
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:19 #14
Ok, hvilke omstændigheder?
Avatar billede arne_v Ekspert
13. september 2005 - 11:21 #15
fra docs:

You cannot use TRUNCATE TABLE on a table referenced by a FOREIGN KEY constraint; instead, use DELETE statement without a WHERE clause. Because TRUNCATE TABLE is not logged, it cannot activate a trigger.

TRUNCATE TABLE may not be used on tables participating in an indexed view.
Avatar billede puppetmaster Nybegynder
13. september 2005 - 11:22 #16
Ahhh, I see.
Det er ikke noget problem her, men tak alligevel, så ved jeg det til en anden gang.
Avatar billede teepee Nybegynder
13. september 2005 - 12:28 #17
Hvis du kører med Full recovery så tag lige en backup af din database når du er færdig med at rydde op. Ellers ligger der en masse i transaction loggen som bare ligger og tager plads.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester