Как «заказать по» может изменить мои результаты здесь? Использование T-SQL, OPENQUERY, SELECT INTO - PullRequest
0 голосов
/ 21 сентября 2009

У меня запланированный процесс AM на SQL Server 2008, который импортирует данные из Oracle, используя связанный сервер. Я перезаписываю импортированные данные из Oracle, используя таблицу перетаскивания, затем выбираю в шаблон

Видимо, наличие "заказа по" влияет на мой конечный результат! Посмотри.

--This works fine to give me the one row I'm expecting from the newly imported table:
drop table t1;
SELECT * into t1 fROM OPENQUERY(ODBC_CSRPT,'
select 
 EXTERNAL_ORGANIZATION_ID  
 ,ORGANIZATION_DESC
 ,STATE
from sysadm.uv_CS_EXTERNAL_ORGANIZATIONS
order by EXTERNAL_ORGANIZATION_ID asc ');
go

select * from t1 
where external_organization_id = '1000107'
go

Но это (ниже) не возвращает строк. Мой orgId 1000107 сейчас отсутствует?

drop table t1;
SELECT * into t1 fROM OPENQUERY(ODBC_CSRPT,'
select 
 EXTERNAL_ORGANIZATION_ID  
 ,ORGANIZATION_DESC
 ,STATE
from sysadm.uv_CS_EXTERNAL_ORGANIZATIONS ');
go

select * from t1 
where external_organization_id = '1000107'
go

Как видите, единственное, что изменилось, - это наличие порядка по предложению. Другой трюк заключается в том, что связанный запрос к серверу возвращает одинаковое количество строк (точнее, 51 225 строк), независимо от того, существует «order by». Есть идеи?

Ответы [ 4 ]

0 голосов
/ 22 сентября 2009

Связанный сервер на основе поставщика: «Поставщик Oracle для OLE DB» (вместо основанного на локальном системном соединении ODBC «Поставщик Microsoft OLE DB для драйверов ODBC») возвратил полный набор результатов с первой попытки.

По какой-то причине в ODBC-соединении должен быть более низкий потолок относительно максимального количества строк, которые могут быть возвращены. Единственной установкой, которую я нашел, был «выбор размера буфера», я попытался удвоить, все еще то же количество возвращаемых строк.

Для этого запроса я просто буду использовать другой связанный сервер.

Еще раз спасибо всем за вклад!

0 голосов
/ 21 сентября 2009

Есть ли такая опция, как SET ROWCOUNT в действии? В частности, в связанной базе данных Oracle. Прошло много лет с тех пор, как я что-то делал с Oracle, поэтому я не помню их подробностей.

0 голосов
/ 22 сентября 2009

Кажется, что я сталкиваюсь с какой-то кепкой в ​​51 225 строк. Я не контролирую сторону Oracle, другой отдел в моей организации. Один из их людей говорит, что точный запрос должен вернуть 51324 строки.

Итак, что действительно происходит, так это то, что мне не хватает 99 строк полного набора результатов. В моем предложении «заказ по» меняются приоритеты результатов, и мне довелось найти одну строку, которую я искал. К сожалению, конечно, это все еще натыкается на 99 других результатов!

Я не знаю, что важно в числе 51,225. Мне трудно представить, что конфигурация sql-сервера связанного сервера каким-то образом будет иметь этот набор (я просто использовал настройки по умолчанию).

В худшем случае, я просто разделю импорт на 2 запроса, упорядоченных в обратном порядке, чтобы охватить все базы. Мне действительно нужно докопаться до этой таинственной 51 225 «шапки», хотя ...

Большое спасибо за все вклады!

0 голосов
/ 21 сентября 2009

Может быть, вам нужно пересчитать индексы в Oracle?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...