DB-Owner in SQL dynamisch ersetzen
Hallo,
ich habe für verschiedene Mandanten immer die gleiche Tabellenstruktur in einer Datenbank gespeichert. Außerdem habe ich eine Kundentabelle, die wie folgt aussieht:
Tabelle CMS.KUNDEN Spalten ( ProdOwner, Name, Beginn ...)
Beispiele sind ( M100, Mandant1, 01.01.2011) , (M200, Mandant2, 01.04.2011) ...
Die Tabellen des Kunden haben jeweils den DB-Benutzer vorweggestellt, also M100.TABELLE1
Bislang habe ich es so gelöst:
SELECT 'Mandant1', Name, Datum, Flag1 FROM M100.TABELLE1
UNION
SELECT 'Mandant2', Name, Datum, Flag1 FROM M200.TABELLE1
...
Wie kann ich es clever lösen, dass alle Mandantennummern aus der Kundentabelle mit einer verschachtelten Abfrage durchlaufen werden.
Danke und Gruß
Thomas
ich habe für verschiedene Mandanten immer die gleiche Tabellenstruktur in einer Datenbank gespeichert. Außerdem habe ich eine Kundentabelle, die wie folgt aussieht:
Tabelle CMS.KUNDEN Spalten ( ProdOwner, Name, Beginn ...)
Beispiele sind ( M100, Mandant1, 01.01.2011) , (M200, Mandant2, 01.04.2011) ...
Die Tabellen des Kunden haben jeweils den DB-Benutzer vorweggestellt, also M100.TABELLE1
Bislang habe ich es so gelöst:
SELECT 'Mandant1', Name, Datum, Flag1 FROM M100.TABELLE1
UNION
SELECT 'Mandant2', Name, Datum, Flag1 FROM M200.TABELLE1
...
Wie kann ich es clever lösen, dass alle Mandantennummern aus der Kundentabelle mit einer verschachtelten Abfrage durchlaufen werden.
Danke und Gruß
Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 176125
Url: https://administrator.de/contentid/176125
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
1 Kommentar
Zitat von @Loonie:
Hallo,
ich habe für verschiedene Mandanten immer die gleiche Tabellenstruktur in einer Datenbank gespeichert. Außerdem habe
ich eine Kundentabelle, die wie folgt aussieht:
Tabelle CMS.KUNDEN Spalten ( ProdOwner, Name, Beginn ...)
Beispiele sind ( M100, Mandant1, 01.01.2011) , (M200, Mandant2, 01.04.2011) ...
Die Tabellen des Kunden haben jeweils den DB-Benutzer vorweggestellt, also M100.TABELLE1
Bislang habe ich es so gelöst:
SELECT 'Mandant1', Name, Datum, Flag1 FROM M100.TABELLE1
UNION
SELECT 'Mandant2', Name, Datum, Flag1 FROM M200.TABELLE1
...
Wie kann ich es clever lösen, dass alle Mandantennummern aus der Kundentabelle mit einer verschachtelten Abfrage durchlaufen
werden.
Danke und Gruß
Thomas
Hallo,
ich habe für verschiedene Mandanten immer die gleiche Tabellenstruktur in einer Datenbank gespeichert. Außerdem habe
ich eine Kundentabelle, die wie folgt aussieht:
Tabelle CMS.KUNDEN Spalten ( ProdOwner, Name, Beginn ...)
Beispiele sind ( M100, Mandant1, 01.01.2011) , (M200, Mandant2, 01.04.2011) ...
Die Tabellen des Kunden haben jeweils den DB-Benutzer vorweggestellt, also M100.TABELLE1
Bislang habe ich es so gelöst:
SELECT 'Mandant1', Name, Datum, Flag1 FROM M100.TABELLE1
UNION
SELECT 'Mandant2', Name, Datum, Flag1 FROM M200.TABELLE1
...
Wie kann ich es clever lösen, dass alle Mandantennummern aus der Kundentabelle mit einer verschachtelten Abfrage durchlaufen
werden.
Danke und Gruß
Thomas
Hi,
ich weiß nicht, ob ich die Frage richtig verstanden habe, aber falls du alle Selects + UNION haben willst, gehts schnell so:
Select case rank() OVER (Order by mandant)
when (select COUNT(mandant) from mandant ) then
'SELECT Mandant'+ case when RIGHT(mandant,1) <> 0 then substring(mandant,2,3) when RIGHT(mandant,2) <> 00 then substring(mandant,2,2) else substring(mandant,2,1) end+', Name, Datum, Flag1 FROM ' + mandant + '.TABELLE1'
else
'SELECT Mandant'+ case when RIGHT(mandant,1) <> 0 then substring(mandant,2,3) when RIGHT(mandant,2) <> 00 then substring(mandant,2,2) else substring(mandant,2,1) end+', Name, Datum, Flag1 FROM ' + mandant + '.TABELLE1 UNION'
end
from mandant
Funktioniert allerdings nur bis zu M###, M#### ist nicht abgedeckt aber einfach zu ergänzen. übersprungene Nummern sind kein Problem.
Gruß