Abfragen in mehreren Datenbanken

MXYPTLK

Benutzer
Beiträge
10
Hallo Forum,

nach einem Sotfwarewechsel muss ich Skripte auf mehreren Datenbanken einer Serverinstanz ausführen. Ich bekomme das aber nicht hin: Ich gehe mit folgendem Skript vor:
DECLARE @DB VARCHAR(50) -- DB-Name
DECLARE @befehl nvarchar(200)

DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE database_id in --(8)
(10,11,12,13,14,15,16,17,18,20,21,22,23,24,24)
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DB
WHILE @@FETCH_STATUS = 0
BEGIN
print @db
set @befehl = 'use [' + @DB + ']'
exec sp_executesql @befehl
-- Daten aus dem Kurskopf übernehmen
update CS_BKV_Kursbelegung set ErloesKonto_Pruefungsgebuehr =
(select ErloesKonto_Pruefungsgebuehr from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)
update CS_BKV_Kursbelegung set ErloesKonto_Anmeldegebuehr =
(select ErloesKonto_Anmeldegebuehr from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)
update CS_BKV_Kursbelegung set [Erloeskonto_Lernmaterial] =
(select [Erloeskonto_Lernmaterial] from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)
update CS_BKV_Kursbelegung set [Erloeskonto_Seminargebuehr] =
(select [Erloeskonto_Seminargebuehr] from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)


FETCH NEXT FROM db_cursor INTO @DB
END

CLOSE db_cursor
DEALLOCATE db_cursor

scheinbar läuft aber alles nur auf der ersten DAtenbank. Wo habe ich hier den Fehler?

Viele Grüße

Heiko Dietrich
 
Werbung:
Hallo Heiko,

ich nehme einmal an, dass das Skript nur einmal ausgeführt werden muss, da du schreibst, dass es durch einen Softwarewechsel kommt. Wenn das der Fall ist, würde ich es mir gar nicht so schwer machen und deinen Code ein bisschen anpassen, damit er uns die SQL-Befehle für die jeweiligen Datenbanken ausgibt.
Ich habe dein Skript etwas angepasst - jetzt wird im Fenster "Meldungen" der Code für alle Datenbanken ausgegeben. Diesen kannst du dann rauskopieren und in ein neues Abfragefenster einfügen -> Ausführen -> Done.

Du musst in dem Code von mir noch deine Einschränkung auf die Datenbanken wieder rein nehmen. Ich habe bei mir nicht so viele, deswegen habe ich die für mich zum testen mal rausgekommen.

Natürlich solltest du den Code erst einmal in einem Testsystem testen ;)

DECLARE @DB VARCHAR(50) -- DB-Name
DECLARE @befehl nvarchar(1000)
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DB
WHILE @@FETCH_STATUS = 0
BEGIN
--print @db
-- Daten aus dem Kurskopf übernehmen
set @befehl = 'USE ['+@DB+']
GO
update CS_BKV_Kursbelegung set ErloesKonto_Pruefungsgebuehr =
(select ErloesKonto_Pruefungsgebuehr from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)
update CS_BKV_Kursbelegung set ErloesKonto_Anmeldegebuehr =
(select ErloesKonto_Anmeldegebuehr from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)
update CS_BKV_Kursbelegung set [Erloeskonto_Lernmaterial] =
(select [Erloeskonto_Lernmaterial] from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)
update CS_BKV_Kursbelegung set [Erloeskonto_Seminargebuehr] =
(select [Erloeskonto_Seminargebuehr] from CS_BKV_Kurse
where CS_BKV_Kurse.ID = CS_BKV_Kursbelegung.KursID)'
PRINT @befehl
FETCH NEXT FROM db_cursor INTO @DB
END
CLOSE db_cursor
DEALLOCATE db_cursor

Viele Grüße!
 
Zuletzt bearbeitet:
Zurück
Oben