6 Stimmen

LINKED Server gibt nicht alle Zeilen zurück

Das ist für mich ein wenig seltsam. Ich habe Skript wie folgt

DECLARE @maxCustId INT
SELECT @maxCustId = MAX(CustomerId) FROM Customers
SELECT * INTO #temp FROM linkserver.DB.dbo.Customers where CustomerId > @maxCustId 

-- Copy records to local db Custome table

DROP TABLE #temp

Aber manchmal holt #temp nicht alle Datensätze aus dem verknüpften Server.

Als hätte ich Max CustomerId = 1138 in meiner lokalen Datenbank, und wenn ich das obige Skript ausführe, fehlt meine temporäre Tabelle (die Datensätze vom verknüpften Server holt) CustoemrIds 1140, 1141 . Der verknüpfte Server hat customers upto 1160 . #temp Tabelle hat Datensätze upto 1160 aber zwei Datensätze fehlen, d.h. 1140, 1141

Ich führe das Skript immer wieder aus und beim vierten Versuch ist der Datensatz 1141 in #temp Tabelle hinzugefügt, aber Datensatz 1140 fehlte noch.

Ich habe dann folgende Abfrage auf dem lokalen Server gestellt, um den Datensatz im verknüpften Server zu überprüfen

SELECT * FROM linkserver.DB.dbo.Customers where CustomerId = 1140

Die obige Abfrage gibt keine Datensätze zurück.

Um dies zu überprüfen, ging ich zum verknüpften Server und schrieb dieselbe Abfrage auf dem Server, von dem aus ich den verknüpften Server erstellt habe.

-- This is the server which I am using as linked server in my local server
SELECT * FROM Customers where CustomerId = 1140

Custoemr 1140 war in der Datenbank, was ich sicher war, dass es dort sein würde, aber ich habe obiges Skript ausgeführt, um es zu überprüfen.

Ich gehe zurück zu meinem lokalen Server und führe folgende Abfrage aus

SELECT * FROM linkserver.DB.dbo.Customers where CustomerId = 1140

Diesmal liefert mein verlinkter Server customer 1140 was sie vorher nicht getan hat.

Ich führe die gesamte Abfrage erneut aus, und jetzt enthält meine Tabelle #temp alle Datensätze.

Ich bin sehr verwirrt, warum der verknüpfte Server beim ersten Mal nicht alle Datensätze zurückgegeben hat.

Dies ist eine Probe aus einer langen Prozedur, die Datensätze von verknüpften Server zu lokalen Server kopieren und aus diesem Grund meine lokale Datenbank hat weniger Datensätze als verknüpfte Server-DB.

  • Verknüpfter Server: SQL Server 2005 Standard mit SP2
  • Lokaler Server: SQL Server 2008 Web Edition mit SP2
  • Anbieter: Native SQL-Klient 10

Verknüpfte Server-Sicherheitsoptionen:

  • unter Verwendung des Sicherungskontextes vorgenommen werden
  • Fern-Anmeldung
  • Mit Passowrd

Benutzerdaten für die Anmeldung:

  • Server-Rollen: öffentlich und sysadmin
  • Benutzerzuordnungen: sa ist nicht zugeordnet mit db I abfragen.
  • Verknüpfte Server-DB wird häufig aktualisiert
  • Kein NOLOCK an irgendeiner Stelle der Abfrage

Jede Hilfe.

1voto

Nathan Griffiths Punkte 11413

Ich habe ein ähnliches Verhalten bei verknüpften Servern beobachtet (allerdings in der Regel bei Oracle und nicht bei SQL Server), und das Problem wurde auf den Treiber zurückgeführt, der für den verknüpften Server verwendet wird. Wie ich sehe, haben Sie SQL Native Client 10 als Provider. Könnten Sie stattdessen Microsoft OLE DB Provider for SQL Server verwenden und sehen, ob das einen Unterschied macht?

-1voto

Justin S Punkte 313

Ich wäre auch neugierig zu wissen, ob Sie das gleiche Problem haben, wenn Sie OpenQuery anstelle der vierteiligen Namenskonvention verwenden:

SELECT * FROM OpenQuery(linkserver,'SELECT * FROM Customers where CustomerId = 1140') 

IIRC, das sollte auf jeden Fall schneller sein... Ich glaube, das würde es zwingen, sich um den "Wo"-Teil auf dem verknüpften Server zu kümmern und nur die entsprechenden Werte zurückzugeben, anstatt den gesamten Datensatz zurückzugeben und die Filterung auf der Zielseite vorzunehmen. Natürlich bin ich mir auch ziemlich sicher, dass ich ein UFO im Haus meiner Oma gesehen habe, als ich acht Jahre alt war, also nehmt meine Weisheit mit Vorsicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X