none
2008R2 Linked Server zu IBM iSeries - CALL ausführen RRS feed

  • Frage

  • Hallo miteinander,

    ich möchte auf der iSeries ("AS400") einen Befehl  (CL) über den SQL-Server ausführen. Ich schaffe es aber nicht, den entsprechenden Verbindungsserver einzurichten. Neben den Anbietern von IBM habe ich auch einen "gekauften" von HIT-Software. Ich kann über den bestehenden Verbindungsserver Daten abfragen, einfügen usw., kein Problem. Mein Problem ist nur, den CALL Befehl abzusetzen, z. B. in einem openquery in einer gespeicherten Procedur. Also versuche ich einen zusätzlichen Verbindungsserver für den Zweck entsprechend einzurichten.

    Warum ich frage: Mit Excel über ADO funktioniert es. Folgender Verbindungsstring wird verwendet, das "SQL-Statement" lautet schlicht "CALL DWH.IRGENDWAS" (ein CL auf der AS400 in Bibl DWH).

    Folgenden Verbindungsstring liefert Excel zurück, wenn ich per ADO mit "Provider=IBMDA400;Data Source=MYAS400;" abrufe:

    Provider=IBMDA400.DataSource.1;Persist Security Info=False;User ID=ICHUSER;Data Source=MYAS400;
    Protection Level=None;Initial Catalog=S1234567;Transport Product=Client Access;SSL=DEFAULT;
    Force Translate=65535;Default Collection=ICHUSER;
    Convert Date Time To Char=TRUE;Catalog Library List="";Cursor Sensitivity=3;
    Use SQL Packages=False;SQL Package Library Name="";
    SQL Package Name="";Add statements to SQL package=True;Unusable SQL Package Action=1;
    Block Fetch=True;Data Compression=True;Sort Sequence=0;Sort Table="";Sort Language ID="";
    Query Options File Library="";Trace=0;Hex Parser Option=0;Maximum Decimal Precision=31;
    Maximum Decimal Scale=31;Minimum Divide Scale=0;Library List="";Naming Convention=0;
    Query Optimize Goal=0;Query Storage Limit=-1;Handle Numeric Data Errors=1;
    Keep Trailing Blanks=False;Application Name=EXCEL.EXE;Decfloat Rounding Mode=0;Decfloat Error Option=0;
    Client User ID="";Client WorkStation Name="";Client Program ID="";Client Accounting="";Block Size=0;
    Concurrent Access Resolution=0;Xml Strip Whitespace=True;

    Meinen Verbindungsserver MYLINKEDAS400 habe ich mit IBMDA400 eingerichtet, inkl. User/Password und Abfragen direkt und über openquery funktionieren, aber das geht eben nicht:

    SELECT * FROM openquery
     (MYLINKEDAS400,'CALL DWH.IRGENDWAS')

    Meldung 7357, Ebene 16, Status 2, Zeile 7
    Cannot process the object "CALL DWH.IRGENDWAS".
    The OLE DB provider "*jeder*getestete*" for linked server "MYLINKEDAS400"
    indicates that either (1) the object has no columns
    or (2) the current user does not have permissions on that object.

    Anm: (1) hmm, ja, und?

    Anm: (2) ich übergebe User/Pwd im Verbindungsserver in den Sicherheitseinstellungen

    Wie muss ich am SQL-Server 2008R2 den Verbindungsserver (mit IBMDA400 etc.) einrichten, um ein CALL in einer SP auszuführen?

    Ich habe zur Einrichtung von Verbindungsservern zu AS400 verschiedene Seiten und Anleitungen gefunden, aber der CALL geht halt trotzdem nicht.

    lg

    arno

    Freitag, 21. April 2017 11:29

Antworten

  • Dies sollte mittels EXEC-Anweisung funktionieren:
    https://msdn.microsoft.com/de-de/library/ms188332.aspx

    Genauer bei "Execute a pass-through command against a linked server"

    Der EXEC sendet den SQL an den Linked-Server. Dies kann also alles sein außer einem Select.




    • Bearbeitet Der Suchende Freitag, 21. April 2017 17:17
    • Als Antwort markiert cavallino Montag, 24. April 2017 08:53
    Freitag, 21. April 2017 17:16

Alle Antworten

  • Dies sollte mittels EXEC-Anweisung funktionieren:
    https://msdn.microsoft.com/de-de/library/ms188332.aspx

    Genauer bei "Execute a pass-through command against a linked server"

    Der EXEC sendet den SQL an den Linked-Server. Dies kann also alles sein außer einem Select.




    • Bearbeitet Der Suchende Freitag, 21. April 2017 17:17
    • Als Antwort markiert cavallino Montag, 24. April 2017 08:53
    Freitag, 21. April 2017 17:16
  • Vielen Dank, bfuerchau!

    In meinem Zusammenhang muss es also lauten, dh. erfolgreich getestet mit:

    EXEC ('CALL DWH.IRGENDWAS') at MYLINKEDAS400

    Den Verbindungsserver habe ich so eingerichtet:

    Verbindungsserver: MYLINKEDAS400

    Anbieter: IBM DB2 for i IBMDA400 OLE DB Provider

    Produktname IBM_MYLINK

    Datenquelle: MYAS400

    Eigenschaften Verbindungsserver, 

    im Reiter Sicherheit:

    "In folgendem Sicherheitskontext" ICHUSER, Kennwort

    im Reiter Serveroptionen: "RPC-Ausgabe" auf 'True'

    lg

    arno

    Montag, 24. April 2017 08:53