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.