ACL to SQL

ukulele

Datenbank-Guru
Beiträge
4.702
Wir testen grade ACL ( http://www.acl.com ) zur Datenanalyse, welches allerdings nicht direkt von ACL an uns lizensiert wird. Ich suche einen Weg, Daten nach SQL zu exportieren, hat hier jemand damit schonmal Erfahrungen gemacht?
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Ja habe das schon getan, schade aber das es nur so umständlich geht. Zum Glück lief der Import nach SQL sehr gut. Am liebsten hätte ich jedoch eine Sync Funktion mit SQL oder eine Möglichkeit, meine SQL Scripte direkt in ACL laufen zu lassen :)

In diesem konkreten Fall muss ich in Buchungsdaten Buchung und Gegenbuchung zusammen puzzeln. Das krieg ich nur mit einem SQL Script hin das mir Schlüssel generiert. Derzeit atemberaubende 200 pro Minute :(
 

ukulele

Datenbank-Guru
Beiträge
4.702
Ich poste mal mein derzeitiges Script, vieleicht hat hier ja jemand eine Idee:
Code:
DECLARE    @NULLbk UNIQUEIDENTIFIER,
        @pk UNIQUEIDENTIFIER,
        @bk UNIQUEIDENTIFIER,
        @buchungs_nr VARCHAR(10),
        @buchungs_datum DATETIME,
        @counter INT
 
-- Dummy PK zur vorübergehenden Nutzung bei Datensätzen die
-- vom Script nicht verarbeitet werden können
SET        @NULLbk = 'F4BEBFC7-1CFB-435A-BFA6-55D12132C0BA'
SET        @counter = 1
 
SET        @pk = newid()
 
WHILE    @counter <= 100
AND        @pk IS NOT NULL
BEGIN
    SET        @pk = (    SELECT    TOP 1 pk
                    FROM    kb
                    WHERE    bk IS NULL )
 
    SELECT    @buchungs_nr = buchungs_nr,
            @buchungs_datum = buchungs_datum
    FROM    kb
    WHERE    pk = @pk
 
    IF        @buchungs_nr != ''
    AND    (    SELECT    sum(konto_umsatz_s) - sum(konto_umsatz_h)
            FROM    (    SELECT    buchungs_belegnr,
                                buchungs_text,
                                konto_umsatz_s,
                                konto_umsatz_h
                        FROM    b
                        WHERE    buchungs_nr = @buchungs_nr
                        AND        buchungs_datum = @buchungs_datum
                        -- ausg. Sammelkonten
                        AND        konto_nr NOT IN ( '1400','1600' ) ) tabelle ) = 0
    BEGIN
        SET        @bk = newid()
    END
    ELSE
    BEGIN
        SET        @bk = @NULLbk
    END
 
    UPDATE    kb
    SET        bk = @bk
    WHERE    buchungs_nr = @buchungs_nr
    AND        buchungs_datum = @buchungs_datum
    UPDATE    lb
    SET        bk = @bk
    WHERE    buchungs_nr = @buchungs_nr
    AND        buchungs_datum = @buchungs_datum
    UPDATE    sb
    SET        bk = @bk
    WHERE    buchungs_nr = @buchungs_nr
    AND        buchungs_datum = @buchungs_datum
 
    SET        @counter = @counter + 1
END

Ich habe drei Tabellen mit "Buchungssätzen", leider ohne Gegenkonto. Diese Tabellen (lb Lieferanten, kb Kunden, sb Sachkontenbuchungen) werden in einer Sicht b zusammengefasst. Die Buchungsnummer ist fast immer eindeutig und, wenn ich das richtig sehe immer gegeben, sofern es sich nicht um EB Werte / AfA Buchungen etc. handelt. Sicherheitshalber prüfe ich auf Buchungsnummer und Datum.

Ich habe einen PK künstlich erzeugt der jeden Datensatz eindeutig macht. Dazu kommt ein BK (Buchungssatz-Key), der Buchungen zusammenfast die die selbe Buchungssatznummer und das selbe Datum haben sowie in Summe Soll - Summe Haben 0 ergeben. Wenn dies nicht der Fall ist wird ein Dummy BK eingetragen, um zu verhindern das der Datensatz sofort wieder ausgewählt wird. Der @counter dient nur als "Laufzeiteinschränkung", damit ich das Script nicht anhalten muss um zwischendurch auszusetzen oder zu testen.

Das Problem ist, die Laufzeit bei 3,3 Mio Datensätzen ist enorm. Hat jemand einen anderen Ansatz als eine Schleife oder andere Optimierungsvorschläge?
 
Werbung:
Oben