Avatar billede travelnow Nybegynder
03. marts 2008 - 14:37 Der er 9 kommentarer og
1 løsning

Delete stored procedures

Hvordan kan jeg slette alle stored procedure der starter med f.eks 'Version_12_'
dvs. noget i stil med
'delete stored_procedure where name like 'Version12_%'

Jeg kan selvfølge bare højreklikke på hver enkelt af dem og vælge delete, men da der er over 100 med samme versions nr, er det alt for tidskrævende
Avatar billede hrc Mester
03. marts 2008 - 15:05 #1
Hvad med at køre et script a la dette i et SQL-vindue?

drop procedure Version_12_1;
drop procedure Version_12_2;
drop procedure Version_12_3;
drop procedure Version_12_4;
..
drop procedure Version_12_99;
drop procedure Version_12_100;
Avatar billede travelnow Nybegynder
03. marts 2008 - 15:26 #2
hvordan det, jeg ved ikke hvad der står efter Version_12_
kan selvfølgelig se det i Server manager, men som sagt er der over 100, og der kan komme nye til.
Jeg ved godt at jeg kun skal oprette scriptet en gang og herefter vedligeholde det og at jeg kan skifte versions nr. ved hjælp af replace, men hel ærlig det gider jeg godt nok ikke, altså at oprette det script.
Og jeg er sikker på at der findes en nemmere måde at gøre det på.
Avatar billede arne_v Ekspert
04. marts 2008 - 04:17 #3
prøv:

CREATE PROCEDURE USP_DROPSPS AS
DECLARE @name VARCHAR(32)
DECLARE c CURSOR FOR SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME LIKE 'Version12_%'
OPEN c
FETCH NEXT FROM c INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
      EXEC('DROP PROCEDURE ' + @name)
      FETCH NEXT FROM c INTO @name
END
CLOSE c
DEALLOCATE c
GO
Avatar billede hrc Mester
04. marts 2008 - 08:05 #4
Arne: Bliver lige nødt til at spørge: Hvor findes INFORMATION_SCHEMA.ROUTINES? Antog først det var en tabel i en af systemdatabaserne. Lidt søgning afslører at det er et systemview (jvf. nedenstående link), men jeg kan ikke finde det nogensteds i systemdatabaserne (SQL 2000).

  http://developer.mimer.com/documentation/html_91/Mimer_SQL_Engine_DocSet/Data_dic_views2.html
Avatar billede arne_v Ekspert
04. marts 2008 - 15:04 #5
INFORMATION_SCHEMA er noget som er kommet til i nyere SQL standarder.

2005 har INFORMATION_SCHEMA.ROUTINES - kan jeg udlede af dit spoergsmaal at 2000
ikke har den ?

Saa skal man jo nok tiul at rode lidt i sysobjects ...
Avatar billede travelnow Nybegynder
04. marts 2008 - 15:16 #6
Tak Arne!
kom med et svar, det var lige det jeg skulle bruge, har dog ikke prøvet det endnu, men har testet at
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME LIKE 'Version12_%'
virker og det gør det, så udfra det kan man altid lave noget kode som virker på den måde man vil. F.eks. noget c# kode hvor man kan vælge/indtaste hvilken version man vil slette.
Avatar billede arne_v Ekspert
04. marts 2008 - 15:29 #7
Du kan sagtens kode det i C# eller andet. Da der ikke blev sagt noget, saa lavede jeg
det i en stored procedure.
Avatar billede travelnow Nybegynder
04. marts 2008 - 15:37 #8
eksemplet du lavede er bare fint, c# delen har jeg styr på.

Så kom med et svar så du kan få dine points
Avatar billede arne_v Ekspert
04. marts 2008 - 15:38 #9
svar
Avatar billede arne_v Ekspert
04. marts 2008 - 15:43 #10
hrc>

Jeg opdagede lige at det ikek var dit spm..

INFORMATION_SCHEMA er specielle - jeg ved faktisk ikke om de eksisterer som synlige views.
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