PDA

View Full Version : Verbindungsserver MSSQL -> AS400



Oli001
31-01-13, 09:47
Hallo,

ich habe einen Verbindungsserver von einer MSSQL zur AS400. Funktioniert soweit auch tadellos.
Ich kann Daten von der AS400 lesen und auch Zeilen in einer Tabelle auf der AS400 löschen.

Nun wollte ich einen INSERT nachen und bekomme folgenden Fehler:

Der angeforderte Vorgang konnte nicht ausgefhrt werden, da der OLE DB-Anbieter 'IBMDA400' fr den Verbindungsserver 'IBMDA400' die angeforderte Transaktionsschnittstelle nicht untersttzt.

Woran kann das liegen? Rechte auf der AS400 könnens ja nicht sein, ein Delete ist ja möglich, die Datei ist auch journalisiert...

Das ganze ist ein Trigger auf ein INSERT:

ALTER TRIGGER [dbo].[TRG_C2ACDTPOP] ON [dbo].[C2ACDTPOP]
FOR INSERT
AS
BEGIN
BEGIN
TRY
INSERT INTO IBMDA400.XXXXXXX.CRMC2A.C2ACDTPOP SELECT * from inserted;
END TRY
BEGIN CATCH
DECLARE
@errTxt varchar (MAX);
SELECT @errTxt = ERROR_MESSAGE();
UPDATE C2ACDTPOP SET DATE_READ=SYSDATETIME(),C2AERR=@errTxt where ID=(select id from inserted);
END CATCH
END



Kann mir jemand helfen?


Danke Oli

Fuerchau
01-02-13, 10:24
Ich deneke mal, dass der MSSQL einen 2-phasigen Commit benötigt, was hier nicht unterstützt wird.
D.h., der Trigger wird innerhalb einer Transaktion ausgelöst, möchte eine verteilte Transaktion (Distributed Transaktion) auf der AS/400 starten was in diesem Fall nicht geht.
Ein ggf. nötiges Rollback kann nämlich dann nicht durchgeführt werden.

Wenn du nur ein Protokoll schreiben willst, definiere den Verbindungsserver mit CMT=0, also ohne Commit, das sollte klappen.