Announcement

Collapse
No announcement yet.

Gespeicherte Prozedur: Übergabe einer kompletten Tabelle als Resultset

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gespeicherte Prozedur: Übergabe einer kompletten Tabelle als Resultset

    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:

    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
    Gruß, Alexander

  • #2
    Noch weitere Informationen benötigt??

    Hallo zusammen,

    ich hoffe, dass ich durch meine Erklärungen kein allzu großes Unverständnis hervorgerufen habe. Solltet Ihr noch Informationen benötigen, stehe ich gerne zur Verfügung.

    Gibt es jemanden, der sich generell mit den Konzepten im SSIS auskennt? Ich würde gerne den von mir eingeschlagenen Lösungsweg genauer diskutieren.

    Gruß, Alexander

    Comment

    Working...
    X