Datenimport von Altsystemen mit unpassenden Datenstrukturen

Wie man seine Daten nach AvERP einlesen kann.

Moderator: SYNERPY

Antworten
tgvoelker
Beiträge: 47
Registriert: So Dez 11, 2005 11:52 am

Datenimport von Altsystemen mit unpassenden Datenstrukturen

Beitrag von tgvoelker »

Oft liegen in Altsystemen Daten vor, deren Struktur nicht einfach übernommen werden kann. Sind komplexe Anpassungen notwendig, so stößt man mit Excel zwar nicht an die Grenzen des grundsätzlich machbaren, wohl aber an die Grenzen des sinnvoll machbaren.

In der Praxis hat sich der Einsatz von Transact SQL (MS SQL-Server, MSDE, MS SQL Server Express Edition) als gute Möglichkeit erwiesen. Inbesonders ist dabei die Möglichkeit interessant, ADO-Datenquellen inline in Transact SQL zu öffnen und normale Transact SQL Befehle auf diese Datenquellen anzuwenden: Joins, Berechnungen, Gruppierungen, Einfügeoperationen usw.

Diese Funktionalität wird mit der OPENROWSET Funktion des SQl Server realisiert:

Code: Alles auswählen

OPENROWSET('MSDASQL','DSN=<dsn>','SELECT * FROM <tabelle>')
Das Rowset wird danach behandelt wie eine normale SQL Server Datenquelle:

Code: Alles auswählen

SELECT * FROM
OPENROWSET('MSDASQL','DSN=<dsn>','SELECT * FROM <tabelle>')
Man ist dabei NICHT auf die vom ODBC-Treiber akzeptierte Syntax eingeschränkt, da der lediglich die zugrundeliegenden Daten liefert (wirkt nur auf das in der OpenRowSet Methode angegebene SQL). Zu beachten ist, daß die Berechtigungsstufe der ADO-Verbindung maßgeblich ist - ist die ADO-Datenquelle schreibgeschützt, so kann natürlich nichts eingefügt werden.[/code]
tgvoelker
Beiträge: 47
Registriert: So Dez 11, 2005 11:52 am

Beitrag von tgvoelker »

Ergänzung: hier ein Beispiel für den direkten Import der sonstigen Artikelgruppen:

Code: Alles auswählen

INSERT INTO OPENROWSET('MSDASQL.1','DSN=AVERP_IB','SELECT * FROM BARTG4')
(MASKENKEY,BEZ,BMENG_ID)
SELECT
MASKENKEY = ARTKZ,
BEZ = KENNBEZ + (CASE WHEN (KENNBEZ1 IS NOT NULL) THEN ' '+KENNBEZ1 ELSE '' END) + (CASE WHEN (KENNZ2 IS NOT NULL)AND(KENNZ2<>CASE WHEN KENNBEZ1 IS NULL THEN '' ELSE KENNBEZ1 END) THEN ' '+KENNZ2 ELSE '' END),
BMENG_ID = 1
FROM
OPENROWSET('MSDASQL','DSN=DBASE_DATA','SELECT * FROM ARTIGRU')
Zu beachten ist bei der Anbindung von Interbase, das der OLEDB-Provider NICHT MSDASQL ist, sondern MSDASQL.1

Die Spaltenberechnungen werden hier in der Transact SQL Engine ausgeführt, dadurch ist man völlig frei in der Datengenerierung. Subselects sind genauso möglich wie komplexe Joins.
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Herzlichen Dank für die Info!
Antworten