Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfragen in mehreren Datenbanken

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MXYPTLK, 12 Januar 2021.

  1. MXYPTLK

    MXYPTLK Benutzer

    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
     
  2. playground

    playground Neuer Benutzer

    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: 13 Januar 2021
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden