Update eines DS auf einer AS/400 über OPENQUERY in einem Trigger

01/12/2008 - 14:41 von Martin Wendel | Report spam
Hallo meine Super SQLer ;-)

Habe da ein problem was ich nicht verstehe:
Hier mal die Beispielabfrage:

UPDATE OPENQUERY(LEARWACK,'SELECT * FROM USDBD_MOD.LWBK_99 WHERE
BKSORT=''W'' AND BKJAHR = ''2008'' AND BKNUMM = ''168''')
SET BKSORT=T2.BKSORT,
BKJAHR=T2.BKJAHR,
BKNUMM=T2.BKNUMM,
BKSTAT=T2.BKSTAT,
BKPARN=T2.BKPARN,
BKAABT=T2.BKAABT,
BKBABT=T2.BKBABT,
BKREAN=T2.BKREAN,
BKLIAN =T2.BKLIAN,
BKART1 =T2.BKART1,
BKART2 =T2.BKART2,
BKABTL =T2.BKABTL,
BKLIEF =T2.BKLIEF,
BKGRUN =T2.BKGRUN,
BKSTRG =T2.BKSTRG,
BKKOST =T2.BKKOST,
BKBSDA =T2.BKBSDA,
BKANDA =T2.BKANDA,
BKANTI =T2.BKANTI,
BKANUS =T2.BKANUS,
BKAEDA =T2.BKAEDA,
BKAETI =T2.BKAETI,
BKAEUS =T2.BKAEUS,
BKUSER=T2.BKUSER
FROM dbo.T_LWBK AS T2
WHERE T2.BKIDEN=9

wenn ich diese einfach im SQL Server "New Query" reinkopiere und ausführe
dann macht der Update genau das was er soll, er holt den definierten Satz von
der AS/400 dated in up und schreibt ihn zurück auf die AS/400, super Sache.

Wenn ich den selben Aufruf aber in einem Trigger starten will (nachdem in
der lokalen Tabelle sich ein Satz geupdatet hat, dann kommt folgende
Fehlermeldung:

Msg 7390, Level 16, State 2, Procedure TR_AU_LWBK, Line 35
The requested operation could not be performed because OLE DB provider
"IBMDA400" for linked server "LEARWACK" does not support the required
transaction interface.

und da ist es egal ob ich über einen ODBC Treiber gehe oder über DAO Treiber.

Irgendjemand eine Idee.


thx
Martin Wendel
 

Lesen sie die antworten

#1 Christoph Muthmann
01/12/2008 - 16:00 | Warnen spam
Martin Wendel wrote:
Hallo meine Super SQLer ;-)

Habe da ein problem was ich nicht verstehe:
Hier mal die Beispielabfrage:
[snip]

wenn ich diese einfach im SQL Server "New Query" reinkopiere und
ausführe dann macht der Update genau das was er soll, er holt den
definierten Satz von der AS/400 dated in up und schreibt ihn zurück
auf die AS/400, super Sache.

Wenn ich den selben Aufruf aber in einem Trigger starten will
(nachdem in der lokalen Tabelle sich ein Satz geupdatet hat, dann
kommt folgende Fehlermeldung:

Msg 7390, Level 16, State 2, Procedure TR_AU_LWBK, Line 35
The requested operation could not be performed because OLE DB provider
"IBMDA400" for linked server "LEARWACK" does not support the required
transaction interface.

und da ist es egal ob ich über einen ODBC Treiber gehe oder über DAO
Treiber.

Irgendjemand eine Idee.



Hallo Martin,
kann es sein, dass durch die Verwendung in einem Trigger eine verteilte
Transaktion draus wird? Dann benötigst Du einen XA-fàhigen Treiber. Welche
Version setzt Du denn ein?

Hier wurde mal àhnliches beschrieben:
http://www.mcpressonline.com/progra...faces.html

Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org

Ähnliche fragen