2016-04-14 3 views
0

Wir haben eine DB2-Datenbank in AS400. Es wurde ein Verbindungsserver hinzugefügt, alles ging gut, aber gelegentlich ist die Tabelle gesperrt, selbst wenn wir einige ausgewählte Abfragen ausführen. Denken Sie über den Tabellenhinweis in SQL Server nach, unterstützt die Abfrage des verknüpften Servers (z. B. * aus auswählen ...) den Tabellenhinweis?Tabellenhinweis zu Abfrage des Verbindungsservers

Antwort

0

Zweifelhaft, aber ich weiß es nicht sicher.

Verwenden Sie openquery() oder 4-teilige Namen?

Eine Abfrage mit 4-teiligen Namen wie so:

select * from LNKSVRNAME.IBMINAME.MYSCHEMA.MYTABLE where somecolumn = '00335'; 

zieht zurück alle Zeilen aus MYTABLE und macht die WHERE Filterung auf MS SQL Server.

Im Gegensatz dazu mit Openquery() wie folgt:

select * from openquery(LNKSVRNAME, 'select * from MYSCHEMA.MYTABLE where somecolumn = ''00335'''); 

Sendet die Abfrage an der IBM i, und nur die passenden Zeilen aus MYTABLE wieder in MS SQL Server gezogen.

Wenn die Tabelle exklusiv gesperrt wird, können Sie nicht viel tun. Wenn Sie jedoch in Zeilensperren geraten. Sie können unter der folgenden DB2 für IBM aussehen soll i-Klauseln

  • FOR READ ONLY
  • SKIP LOCKED DATA oder USE CURRENTLY COMMITTED oder WAIT FOR OUTCOME

So etwas wie folgt aus:

select * from openquery(LNKSVRNAME, 'select * from MYSCHEMA.MYTABLE where somecolumn = ''00335'' FOR READ ONLY USE CURRENTLY COMMITTED'); 

Hinweis Wenn Sie sprechen tatsächlich mit einer AS/400, FOR READ ONLY ist alles, was Sie zur Verfügung haben werden. Aber wenn Sie mit einem relativ neuen IBM POWER System sprechen, auf dem eine relativ neue Version von IBM i ausgeführt wird, sollten die von mir gezeigten Klauseln concurrent-access-resolution verfügbar sein.

Verwandte Themen