2009-09-21 8 views
0

J'ai un processus AM planifié sur SQL Server 2008 qui importe des données à partir d'Oracle à l'aide d'un serveur lié. Je remplace les données importées d'Oracle à l'aide de drop table, puis sélectionnez dans le modèleComment "commander par" change mes résultats ici? Utilisation de T-SQL, OPENQUERY, SELECT INTO

Apparemment, la présence de la "commande par" affecte mon résultat final! Regarde.

--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 

Mais ceci (ci-dessous) ne renvoie aucune ligne. Mon orgId de 1000107 est maintenant manquant? Comme vous pouvez le voir, la seule chose qui a changé est la présence de la clause order by. Une autre friandise est que la requête du serveur lié retourne le même rowcount (51.225 lignes pour être exact) que le "order by" existe ou non. Des idées?

+0

Eh bien, vous laissez tomber la table chaque fois que vous exécutez ce lot ... est-il possible que les types de données soient différents à chaque approche? Cela aiderait à expliquer pourquoi la deuxième requête ne renvoie rien. –

+0

Est-ce que t1 contient également 51 225 lignes après chaque approche? – Gratzy

+0

est-il possible que l'importation se termine avant que les données réelles soient dans la table, et qu'en ordonnant la sélection d'importation, l'enregistrement que vous recherchez figure dans l'une des premières pages, alors que lors de l'importation non ordonnée des dernières pages? –

Répondre

0

Peut-être avez-vous besoin de recalculer les index sur Oracle?

0

Existe-t-il une option comme SET ROWCOUNT? En particulier sur la base de données Oracle liée. Cela fait des années que je n'ai rien fait avec Oracle alors je ne me souviens pas de leurs détails.

0

Semble que je cours dans une sorte de capuchon à 51 225 lignes. Je ne contrôle pas le côté Oracle, un autre département de mon organisation. Un de leurs interlocuteurs dit que la requête exacte est supposée renvoyer 51 324 lignes. Donc, ce qui se passe vraiment, c'est que je suis à 99 lignes du jeu de résultats complet. Ma clause "order by" redéfinit les résultats par ordre de priorité et m'a donné la rangée que je cherchais. Malheureusement, bien sûr, 99 autres résultats sont encore disponibles!

Je ne sais pas ce qui est important sur le nombre 51.225. Difficile pour moi d'imaginer que la configuration du serveur sql du serveur lié aurait cet ensemble en quelque sorte (je suis allé avec les valeurs par défaut lors de la mise en place). Le pire des cas, je vais juste diviser l'importation en 2 requêtes, ordonnées de manière opposée, donc je couvre toutes les bases. J'ai vraiment besoin d'aller au fond de ce mystérieux 51 225 "cap" si ...

Merci beaucoup pour toutes les entrées!

0

Le serveur lié basé sur le fournisseur: "Fournisseur Oracle pour OLE DB" (au lieu de basé sur une connexion ODBC système "Fournisseur Microsoft OLE DB pour les pilotes ODBC") a renvoyé le jeu de résultats complet en premier.

Pour une raison quelconque, il doit y avoir un plafond plus bas sur la connexion ODBC en ce qui concerne le nombre maximal de lignes pouvant être retournées. Seul le réglage que j'ai trouvé était "récupérer la taille du tampon", j'ai essayé de doubler, toujours le même nombre de lignes retournées.

Pour cette requête, je vais simplement utiliser l'autre serveur lié.

Merci encore à tous pour l'entrée!

Questions connexes