hightow Skrevet 18. desember 2008 Del Skrevet 18. desember 2008 Jeg trenger å oppdatere en rekke databaser som jeg gjerne vil oppdatere via et script. Strukturen på disse er helt like. Databasene finner jeg i master..sysdatabases, via feltet 'name' Scriptet ser slik ut foreløpig: --------------------------------- DECLARE MyDBs CURSOR FOR SELECT name FROM master.sysdatabases WHERE name = '<et eller annet hemmelig kriterie>' FOR READ ONLY DECLARE @DBname VARCHAR(50) OPEN MyDBs FETCH NEXT From MyDBs INTO @DBname WHILE (@@FETCH_STATUS = 0) BEGIN --> Her kommer scriptet som skal oppdatere databasen @DBname, som jeg sliter med syntaks END --------------------------------- Det er altså det som ligge mellom BEGIN og END som jeg ikke vet helt syntaksen på. Jeg kan vel ikke bruke USE på en deklarert variabel, og ikke vil vel '@DBname..MyTable' vil fungere heller. Noen som kan hjelpe meg her? Alternativet er at jeg kjører scriptet mitt for hver database, men når antall databaser er ca. 100, så vil jeg finne en enklere metode. Lenke til kommentar
mathias123 Skrevet 24. desember 2008 Del Skrevet 24. desember 2008 (endret) Jeg regner med at dette er en engangsjobb/evt en batch som ikke kjøres så ofte. Jeg ville ha laget dette i enten perl eller php. Dette ser ut som Oracle som jeg ikke er helt stødig i, men logikken bør være slik: Først liste opp alle databaser (i eget script). Parse databasene inn i et array, fjerne de som ikke skal kjøres. Kjør en foreach ($databases as $database): $sql = "UPDATE $database.rowname SET yyy=xxx WHERE zzz=æøå". mysql_query("BEGIN TRANSACTION"); mysql_query($sql); mysql_query("COMMIT"); echo "Oppdaterte $database"; endforeach; Etter min mening er det sjelden det virkelig lønner seg å lære seg databasespråk(* edit). Det er kun i situasjoner der optimalisering er helt avgjørende jeg ville ha brukt tid på å prøve og feile med en Oracle-prosedyre. Om ikke databasen din er usannsynlig stor, vil en scriptspråk gjøre samme nytten. Det eneste som vil bli sendt til og fra databasen er de tre linjene SQL + resultatet (hvor mange rader som ble oppdatert). (* edit: i betydningen prosedyre/scriptspråk i Oracle/DB2. SQL skal man selvfølgelig lære seg...) Endret 24. desember 2008 av mathias123 Lenke til kommentar
RulleRimfrost Skrevet 24. desember 2008 Del Skrevet 24. desember 2008 Dynamisk sql kanskje? Om du inkluderer en variabel der du legger inn sql som kan endres mellom hver kjøring. declare @dynSql nvarchar(255) bla bla bla ... begin set @dynSql ='use ' + @DBname + ' sett inn hemmelig endringsskript' exec sp_execute @dynSql fetch next DBname end Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå