Для меня это немного странно. У меня есть сценарий вроде
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
, но иногда #temp не извлекает все записи со связанного сервера.
Как будто у меня было Max CustomerId = 1138
в моей локальной базе данных, и когда я запускаю указанный выше скрипт, моя временная таблица (которая извлекает записи со связанного сервера) пропускает CustoemrIds 1140, 1141
. Связанный сервер имеет клиентов до 1160
. Таблица #temp
содержит записи до 1160
, но пропускает две записи, то есть 1140, 1141
Я запускаю этот сценарий снова и снова и при 4-й попытке запись 1141
добавлен в таблицу #temp, но запись 1140
все еще отсутствует.
Затем я помещаю следующий запрос на локальный сервер, чтобы проверить запись на связанном сервере
SELECT * FROM linkserver.DB.dbo.Customers where CustomerId = 1140
Вышеуказанный запрос не возвращает никаких записей.
Чтобы проверить это, я пошел на связанный сервер и написал тот же запрос на сервере, с которого я создал СВЯЗАННЫЙ сервер .
-- This is the server which I am using as linked server in my local server
SELECT * FROM Customers where CustomerId = 1140
Custoemr 1140
находился в базе данных, и я был уверен, что он будет там, но я запускаю указанный выше сценарий, чтобы проверить его.
Я возвращаюсь на свой локальный сервер и запускаю этот запрос
SELECT * FROM linkserver.DB.dbo.Customers where CustomerId = 1140
На этот раз мой связанный сервер возвращает клиента 1140
, которого он не возвращал ранее.
Я снова выполняю весь запрос, и теперь в моей таблице #temp есть все записи.
Я так сбит с толку, почему первый связанный сервер не вернул все записи.
Это образец из длинной процедуры, которая копирует записи со связанного сервера на локальный сервер, и по этой причине моя локальная база данных имеет меньше записей, чем база данных связанного сервера. db I query.
Любая помощь.