PDA

View Full Version : MSSQL - Anbindung



Oli001
18-06-12, 09:28
Hallo,

ich habe folgendes Problem:

In einem MSSQL Server werden Tabellen der AS400 abgebildet. Gefüllt werden diese Tabellen per OPENQUERY-Funktion von MS. Das funktioniert auch soweit ganz gut. Das Problem ist jetzt aber, dass ich die Datensätze die von der AS400 gelesen wurden in dieser Tabelle auch wieder löschen muss. Ich dachte an einen Trigger, auf der MSSQL-DB, der mir den geschriebenen Satz auf der AS400 wieder löscht. Die Sätze sind eindeutig, aber ich kann bei einem OPENQUERY keine Variablen mitgeben. Hat jemand einen Tipp für mich? Notfalls schreibe ich ein Programm auf der AS400, das den Satz löscht, aber kann man vom MSSQL ein Prog auf der AS400 starten?

Grüße Oli

BenderD
18-06-12, 09:41
... von der MSSQL Büchse kommt man per ODBC auf die AS/400 und kann da sowohl Sätze löschen, oder eine stored Procedure aufrufen.
Mit der Open Source Software ArdGate könnte man allerdings auch von der AS/400 mit embdedded SQL, order sogar per QMQRY die Daten in SQL Server Tabellen schreiben.

D*B

Oli001
18-06-12, 09:44
Hallo BenderD,

wenn du mir nun noch verrätst wie man auf per ODBC auf die AS400 kommt, dann wäre ich dir unendlich dankbar...

-- Falls du LinkedServer meinst, das verwende ich bereits...

Grüße Oli

BenderD
18-06-12, 09:55
Let me google that for you (http://lmgtfy.com/?q=odbc+as400)

Oli001
18-06-12, 10:02
Hallo BenderD,

ich denke ich hab mich nicht richtig ausgedrückt. Ich verwende auf dem MSSQL - Server gespeicherte Prozeduren, die mir die entsprechenden Tabellen füllen. Ich programmiere nicht, sondern die Prozeduren werden zu bestimmten Zeiten aufgerufen, um einen Abgleich von der AS400 zum SQL zu bekommen. Per OpenQuery kann man aber keine Variablen verwenden:

delete
OpenQuery('link','select id from tabelle where id = '+@id) geht net...

Deswegen such ich nach einer Alternative....

Grüße Oli

Fuerchau
18-06-12, 10:59
Statt OpenQuery kannst du ganz normale SQL's verwenden.
Der Name der Tabelle setzt sich dann aus 4 Teilen zusammen (Groß/Klein beachten):

select * from LinkName.SYSNAME.LIBNAME.TABLE
[Join ...]
[where ...]
[Group ...]
[having ...]

In dieser Form kannst du dann Parameter verwenden sowie auch Insert/Update/Delete.

Statt SYSNAME ist der RDB-Name den du als *LOCAL bei WRKRDBDIRE angegeben hast zu nehmen.