SQL-Abfrage über mehrere Mandanten

8. Februar 2011 18:38

Hallo

Ich stehe im Moment vor der Aufgabe einen SQL-Report direkt mit SQL Report-Services zu machen.
An sich kein Problem.
Nun soll die Abfrage allerdings über alle Mandanten im System und die Debitorenumsätze und DB anzeigen.

Hat mir jemand einen Tipp wie man das am Besten angeht?
- SQL Abfrage dynamisch aufbauen und mit EXEC ausführen?
- Views?
- Mehrere Statement nacheinander mit UNION?
oder?

Vielen Dank für Anregungen.

Gruss

Re: SQL-Abfrage über mehrere Mandanten

9. Februar 2011 09:30

Morgen

Ich mache das normalerweise mit einem View, in welchem ich UNION ALL verwende. Je nachdem, wie viele Datensätze die Tabellen enthalten, kann natürlich eine Abfrage eine lange Zeit dauern :-)

Im View kann dann ja einfach eine Spalte mit "Company" oder so ähnlich hinzugefügt werden, welche dann im Reporting Services einfach mit Parametern gefiltert werden kann.

Re: SQL-Abfrage über mehrere Mandanten

9. Februar 2011 09:43

Hallo Bender

So habe ich mir das eigentlich auch zuerst gedacht.
Was mich aber an dieser Lösung stört ist, dass sie nicht flexibel ist.
Dieser Kunde hat öfters neue Mandanten oder Mandanten werden umfirmiert bzw. umbenannt.
Dann muss jedesmal Hand angelegt werden.

Mir schwebt so eine Lösung wie folgt vor:
- Cursor über alle Mandanten
- Loop
- Pro Mandant das Script Dynamisch zusammensetzen und an SQL-Server mit EXEC übergeben

Das Problem ist, aber dass ich dann gewisse Variabeln wie z.b. Von Datum, Bis Datum im Script deklariere, aber in der dynamischen Abfrage nicht zur Verfügung habe.

Ich versuch mal ein Beispiel zu machen und werde es dann hier posten. Vielleicht wirds dann verständlicher.

Danke und Gruss

Re: SQL-Abfrage über mehrere Mandanten

9. Februar 2011 10:02

Es gibt eine Tabelle Company über die man iterieren kann per sql und dann den Feldnamen als prefix für die Mandantentabellen nehmen.

Re: SQL-Abfrage über mehrere Mandanten

9. Februar 2011 10:04

Es gibt eine Tabelle Company über die man iterieren kann per sql und dann den Feldnamen als prefix für die Mandantentabellen nehmen.


Genau das wäre ja mein Ansatz.
Das iterieren über die Companys ist der einfachste Teil, aber wie setze ich dann die eigentliche Abfrage zusammen?

Das ist mein problem.

Re: SQL-Abfrage über mehrere Mandanten

9. Februar 2011 10:13

martinst hat geschrieben:
Es gibt eine Tabelle Company über die man iterieren kann per sql und dann den Feldnamen als prefix für die Mandantentabellen nehmen.


Genau das wäre ja mein Ansatz.
Das iterieren über die Companys ist der einfachste Teil, aber wie setze ich dann die eigentliche Abfrage zusammen?

Das ist mein problem.


Google First Hit: http://support.microsoft.com/kb/111401
;-)

Gruß
Jan

Re: SQL-Abfrage über mehrere Mandanten

10. Februar 2011 10:33

Google First Hit: http://support.microsoft.com/kb/111401


Fast, aber eben nur fast.
In diesen Beispielen ist das Resultat der ersten Abfrage ein Teil der Where-Bedingung.
In meinem Fall wären dies ja die Mandatenten.
Die Mandanten sind ja aber nicht Teil der Where-Bedingung, sondern des Tabellennamens :-(

Bsp.
Select No_, Name From Mandant1$Customer Where [Post Code] = 'xy'
Select No_, Name From Mandant2$Customer Where [Post Code] = 'xy'
Select No_, Name From Mandant3$Customer Where [Post Code] = 'xy'
Select No_, Name From Mandant4$Customer Where [Post Code] = 'xy'

Das ist eben mein Problem.

Gruss

Re: SQL-Abfrage über mehrere Mandanten

10. Februar 2011 11:29

Du kannst den Tabellennamen auch zusammensetzen.
Du "forgst" Dir ein SQL Statement-String und lässt diesen dann ausführen.
Dann kannst Du auch über die Mandantentabellen iterieren.

Re: SQL-Abfrage über mehrere Mandanten

10. Februar 2011 14:23

Hallo Jan

Dann werde ich wohl nicht um diese Lösung herumkommen.
Das Ganze ist halt relativ mühsam, weil dann alles als Text zusammengebastelt werden muss (inkl. Variabeln etc.).

Aber vielen Dank trotzdem.

Re: SQL-Abfrage über mehrere Mandanten

17. Februar 2011 13:11

martinst hat geschrieben:Hallo Jan

Dann werde ich wohl nicht um diese Lösung herumkommen.
Das Ganze ist halt relativ mühsam, weil dann alles als Text zusammengebastelt werden muss (inkl. Variabeln etc.).

Aber vielen Dank trotzdem.


Wenn du eine andere Lösung findest, sag bescheid, mich interessiert das Thema auch momentan.

Re: SQL-Abfrage über mehrere Mandanten

17. Februar 2011 14:04

Naja, im optimalfall packst du dein sql-statement in einen String und da wo der Mandant steht, machst halt eine String.Konkatenation mit der einen Variable.
Ausserdem musst Du das ganze eh nur einmal programmieren.