Hallo zusammen,
ich möchte mit Hilfe der SSIS zeitgesteuert Daten exportieren, die sich seit dem letzten Exportvorgang geändert haben. Dazu übergebe ich an eine Gespeicherte Prozedur die zuvor gespeicherte max(unique_id) und starte die Abfrage. Leider kann ich nicht mit einer temporären Tabelle arbeiten, da mir diese nur zur Laufzeit der Prozedur zur Verfügung steht. Der eigentliche Export findet aber dann zu einem späteren Zeitpunkt statt. Also arbeite ich mit einem SELECT * INTO, das mir eine Tabelle in der DB erstellt, in die das Delta seit der letzten Änderung gespeichert wird.
Bei der DB handelt es sich um ein CRM-System, bei dem die User sich per Knopfdruck einen Prototypen erstellen können, so dass Sie die Daten auch auf Reisen mit dabei haben. Die Lösung in der DB im Echtbetrieb alle 5 min. Tabellen zu erstellen und zu löschen gefällt mir also gar nicht. Ich kann nicht ausschließen, dass es irgendwann mal zu Inkonsistenzen bei der Erstellung des Travel-Prototypen oder bei der anschließenden Synchronisation kommen wird. Deshalb bin ich auf der Suche nach einer Lösung, das Ergebnis der Abfrage als Resultset an die SSIS zurück zu geben, so dass ich erst gar keine Tabellen in der DB erstellen muss.
Ich habe auch schon überlegt, die Tabellen in einer 2. DB erstellen zu lassen, in die ich auch die Tabellen für das Logging für Im- und Export auslagere. Ich bin mir aber sicher, dass es hier noch eine elegantere Lösung geben muss.
Hat jemand eine Idee wie man das einfacher lösen kann?
Unten stehend findet Ihr das Statement:
Gruß, Alexander
ich möchte mit Hilfe der SSIS zeitgesteuert Daten exportieren, die sich seit dem letzten Exportvorgang geändert haben. Dazu übergebe ich an eine Gespeicherte Prozedur die zuvor gespeicherte max(unique_id) und starte die Abfrage. Leider kann ich nicht mit einer temporären Tabelle arbeiten, da mir diese nur zur Laufzeit der Prozedur zur Verfügung steht. Der eigentliche Export findet aber dann zu einem späteren Zeitpunkt statt. Also arbeite ich mit einem SELECT * INTO, das mir eine Tabelle in der DB erstellt, in die das Delta seit der letzten Änderung gespeichert wird.
Bei der DB handelt es sich um ein CRM-System, bei dem die User sich per Knopfdruck einen Prototypen erstellen können, so dass Sie die Daten auch auf Reisen mit dabei haben. Die Lösung in der DB im Echtbetrieb alle 5 min. Tabellen zu erstellen und zu löschen gefällt mir also gar nicht. Ich kann nicht ausschließen, dass es irgendwann mal zu Inkonsistenzen bei der Erstellung des Travel-Prototypen oder bei der anschließenden Synchronisation kommen wird. Deshalb bin ich auf der Suche nach einer Lösung, das Ergebnis der Abfrage als Resultset an die SSIS zurück zu geben, so dass ich erst gar keine Tabellen in der DB erstellen muss.
Ich habe auch schon überlegt, die Tabellen in einer 2. DB erstellen zu lassen, in die ich auch die Tabellen für das Logging für Im- und Export auslagere. Ich bin mir aber sicher, dass es hier noch eine elegantere Lösung geben muss.
Hat jemand eine Idee wie man das einfacher lösen kann?
Unten stehend findet Ihr das Statement:
Code:
CREATE PROCEDURE [dbo].[spExportContacts] ( @valTtlIdMax as int ) AS BEGIN SET NOCOUNT ON; SELECT * into CRM5.spsexportcontacts FROM dbo.viewExportContacts WHERE C_ID in (SELECT DISTINCT contact.contact_id FROM CRM5.traveltransactionlog AS ttl LEFT OUTER JOIN CRM5.contact AS contact ON ttl.tablenumber = 5 AND ttl.record_id = contact.contact_id WHERE (ttl.tablenumber = 5) AND (ttl.type IN (4352, 4608)) AND (ttl.traveltransactionlog_id > @valTtlIdMax)) END
Comment