Я выполняю простой запрос вставки, как показано ниже:
INSERT INTO tbl_destination ...
SELECT ... FROM [SomeOtherLinkedServer] .tbl_source
В результате получается 3 000 000 строк, вставленных в таблицу назначения, хотя SELECT возвращает 9 000 000 строк. В чем может быть причина?
Я использую SQL Server 2005 Standard Edition. Таблица назначения и исходная таблица расположены на двух разных серверах SQL. Сообщение об ошибке не отображается. Таблица назначения служит как временная куча данных - она не имеет ничего. ключ, без индексов. Я проверил дисковое пространство и количество доступного пространства для tbl_destination - много ГБ. Странно .. Я буду очень признателен за любые предложения!
редактирование:
Спасибо за ваши предложения.
Когда я запускал SELECT COUNT (*) как локально (на связанном сервере), так и при входе в систему на самом связанном сервере, он показывал 9M строк.
Однако, когда я запустил фактический SELECT ... на связанном сервере:
SELECT ... FROM [SomeOtherLinkedServer].tbl_source
результат - 3M строк и сообщений об ошибках нет.
Тот же запрос выполняется при входе на удаленный сервер:
SELECT ... FROM tbl_source
также вернул 3M строк, но на этот раз с сообщением об ошибке (похоже, что при выполнении запроса, использующего таблицы на связанном сервере, не отображаются все сообщения об ошибках):
Msg 701, Level 17, State 123, Line 1
There is insufficient system memory to run this query.
Так что теперь ясно, что это проблема с памятью. Есть ли способ (без установки дополнительной памяти на сервере), чтобы преодолеть эту проблему - вставить весь результат этого запроса в таблицу? Спасибо!
Еще одна вещь - tbl_source на самом деле не таблица, это представление. К сожалению, поддерживается кем-то другим, так что оптимизация его внутренних функций не вариант (по крайней мере, пока).