Avatar billede jobless Nybegynder
25. september 2005 - 15:32 Der er 26 kommentarer og
1 løsning

Tøm tabeller.

Hej.

Jeg er newbie vedr. stored procedures, og ønsker derfor lidt hjælp til at lave dette:

I forbindelse med en hel del tests, har jeg behov for at tømme mange tabeller, og nulstille identity.

Det jeg forestiller mig er, at en stored procedure kaldes, og tømmer alle tabeller hvis navn ikke starter med 'sys' eller 'tbl'.

Kan dette laves?

MVH

JoBless
Avatar billede arne_v Ekspert
25. september 2005 - 15:51 #1
prøv:

CREATE PROCEDURE CLEANUP AS

DECLARE @name  VARCHAR(32)

DECLARE c CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND NOT TABLE_NAME LIKE 'sys%' AND NOT TABLE_NAME LIKE 'tbl%'

OPEN c

FETCH NEXT FROM c INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
      EXEC('DROP TABLE ' + @name)
      FETCH NEXT FROM c INTO @name
END

CLOSE c

DEALLOCATE c

GO
Avatar billede arne_v Ekspert
25. september 2005 - 15:52 #2
husk at teste på en test database først inden du sletter !!!!!!!!!!!!!!!!!!!
Avatar billede jobless Nybegynder
25. september 2005 - 15:56 #3
Jeg tester lige....

Betyder 'DROP TABLE' at den tømmer tabellen, eller at den sletter tabellen ?
Avatar billede arne_v Ekspert
25. september 2005 - 16:00 #4
sletter

erstat med DELETE FROM hvis du kun vil fjerne data
Avatar billede jobless Nybegynder
25. september 2005 - 16:04 #5
ok, vil den så også nulstille Identity's?
Avatar billede arne_v Ekspert
25. september 2005 - 16:53 #6
jeg tror at du er nødt til at slette tabellen og oprette igen for at nulstille identity

men jeg er ikke sikker så prøv
Avatar billede arne_v Ekspert
25. september 2005 - 16:54 #7
PS: hvis du har brug for at nulstille en identity så bør feltet sikkert ikke
    være identity
Avatar billede jobless Nybegynder
25. september 2005 - 16:58 #8
Hvad er den letteste måde at eksekvere den manuelt på ?
Avatar billede arne_v Ekspert
25. september 2005 - 17:01 #9
EXEC CLEANUP
Avatar billede arne_v Ekspert
25. september 2005 - 17:01 #10
eller bare

CLEANUP
Avatar billede arne_v Ekspert
25. september 2005 - 17:01 #11
erstat evt.

EXEC('DROP TABLE ' + @name)

med

PRINR @name

for at se hvad der sker først

:-)
Avatar billede jobless Nybegynder
25. september 2005 - 17:11 #12
Den tømmer fint tabellerne, med undetagelse af en enkelt som hedder 'Disk'. Det er sikkert et reserveret ord, hvad skal jeg afgrænse med, for at få denne tabel med ?
Avatar billede arne_v Ekspert
25. september 2005 - 17:14 #13
prøv med

[Disk]
Avatar billede jobless Nybegynder
25. september 2005 - 17:18 #14
Fint, dog nulstilles Identity ikke, men det overlever jeg nu nok.
Avatar billede jobless Nybegynder
25. september 2005 - 17:18 #15
Lægger du lige et svar?
Avatar billede arne_v Ekspert
25. september 2005 - 17:19 #16
kommer her
Avatar billede jobless Nybegynder
25. september 2005 - 17:22 #17
Tak for den speedy hjælp ;=)
Avatar billede mnoer Nybegynder
28. september 2005 - 16:35 #18
hvis du bruger "truncate tabelNavm" så bliver tabellen tømt, og ID'er starter forfra.
Avatar billede jobless Nybegynder
29. september 2005 - 08:08 #19
Hvordan kan jeg sende en parameter med til min stored procedure, således at jeg f.eks. kan bruge denne i den sql-statement som bruges i min SP ?
Avatar billede jobless Nybegynder
29. september 2005 - 08:13 #20
Opgaven er at jeg gerne vil have udvidet ovenstående SP, således at den tømmer tabeller som nu, men SP skal modtage et ID, og slå op i en enkelt tabel (en->mange) og slette posterne i alle tabellerne (som nu), hvor feltet ComputerID matcher de oversatte ID'er i opslaget.

Er det helt volapyk ?
Avatar billede arne_v Ekspert
29. september 2005 - 22:06 #21
du sender vel bare en parameter over til din SP og bruger den til at sætte
en WHERE på en DELETE
Avatar billede jobless Nybegynder
30. september 2005 - 06:51 #22
ja, men parameteren skal bruges til at slå værdierne op som skal bruges i min where clause.

Hvordan sender jeg en parameter med?
Avatar billede arne_v Ekspert
30. september 2005 - 07:38 #23
CREATE PROCEDURE CLEANUP
@in INTEGER
AS

og

EXEC('xxxxxxxx xxxx ' + @name + ' WHERE id = ' + @id)
Avatar billede jobless Nybegynder
30. september 2005 - 07:53 #24
og i sql:
cleanup(15)

??
Avatar billede arne_v Ekspert
30. september 2005 - 08:17 #25
cleanup 15

eller

exec cleanup 15

tror jeg (jeg kalder normalt sp fra programmer)
Avatar billede jobless Nybegynder
30. september 2005 - 10:08 #26
Kan den ene sp godt kalde den anden, med en parameter?
Avatar billede arne_v Ekspert
30. september 2005 - 10:16 #27
ja
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