Пересортировка данных при запросе на linked server
При запросе на сервер Oracle через Oracle Provider for OLE DB (включен интерпроцессинг) результат запроса возвращается вперемешку (значения из clob).
- На разных версиях Oracle 12,19,20
- На разных версиях SQL Server и серверах
- C OpenQuery и без него
- Версия Oracle 12
Напрямую (sql developer) таких проблем нет
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
У существующего подхода есть две проблемы:
- Весь набор данных переносится из Oracle в SQL Server как есть.
- Фильтр предложения WHERE применяется на стороне SQL Server.
Лучший способ — использовать другой метод: EXECUTE ... AT [Linked Server]
Этот метод заставляет выполнять SELECT ... на стороне Oracle, а также даже передавать параметры для Oracle.
Вам придется изменить параметры @start и @end, поскольку Oracle ожидает их в формате, отличном от формата SQL Server. Вы можете протестировать формат параметров непосредственно со стороны Oracle. Возможно, используйте функцию Oracle to_date().
SQL
DECLARE @start DATETIME = DATEADD(HOUR, -3, (CAST(FLOOR(CAST(GETDATE() - 1 AS FLOAT)) AS DATETIME)));
DECLARE @end DATETIME = DATEADD(HOUR, -3, (CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)));
EXECUTE(N'SELECT ID,
STARTDATE,
ENDDATE,
IDMAIN,
COMMENT
FROM [DIR].[MAINDATA]
WHERE enddate >= ? AND enddate < ?
ORDER BY ...',
@start, @end) AT [LSTL2];