Seite 1 von 1

Datenimport von Altsystemen mit unpassenden Datenstrukturen

Verfasst: So Dez 11, 2005 12:08 pm
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]

Verfasst: Sa Dez 17, 2005 12:16 pm
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.

Verfasst: Mo Dez 19, 2005 8:15 am
von admin
Herzlichen Dank für die Info!