2010-12-15 107 views
1

J'ai les questions suivantes qui interroge un serveur lié je dois parler.SQL: OPENQUERY Ne retourne pas toutes les lignes

SELECT * DE

OPENQUERY (DWH_LINK, 'SELECT * FROM TABLEA')

Il retourne généralement la plupart des données, mais certaines lignes sont manquantes?

Le serveur linkeds provient d'un client Oracle

Est-ce un problème quelqu'un a rencontré w/openquery?

+0

est-il une autre façon d'accéder aux données d'un serveur lié autre que l'utilisation openquery – Bill

Répondre

0

Cela semble être lié aux capacités du fournisseur sous-jacent et d'autres ont également rencontré des limitations de taille/ligne similaires. Une solution possible consisterait à implémenter une requête itérative/en boucle avec un filtrage intégré pour retirer une certaine quantité de lignes. Avec Oracle, je pense que cela pourrait utiliser le rownum (pas très familier avec Oracle).

donc quelque chose comme

--Not tested sql, just winging it syntax-wise 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 0 AND 500') 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 500 AND 1000') 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum ...') 

BOL: link Ceci est soumis aux capacités du fournisseur OLE DB. Bien que la requête puisse renvoyer plusieurs ensembles de résultats, OPENQUERY renvoie uniquement le premier.

3

J'avais exactement le même problème. La cause première est que vous avez configuré votre serveur lié en utilisant ODBC au lieu de OLE DB.

Voilà comment je l'ai fixé:

  • Supprimer le serveur lié de SQL Server
  • clic droit sur le dossier "Serveurs liés" et sélectionnez "Nouveau serveur lié ..."
  • serveur lié : entrez anything..this sera le nom de votre nouveau serveur lié
    • fournisseur: Sélectionnez « fournisseur Oracle pour OLE DB »
    • nom du produit: entrez « Oracle » (sans double q uotes)
    • Source de données: entrez l'alias de votre fichier TNSNAMES.ORA. Dans mon cas, il était "ABC.WORLD" (sans les guillemets)
    • Chaîne du fournisseur: laissez le champ vide
    • Lieu: laisser le champ vide
    • Catalogue: laisser le champ vide

Maintenant allez dans l'onglet "Sécurité", et cliquez sur le dernier bouton radio qui dit "Soyez fait en utilisant ce contexte de sécurité:" et entrez le nom d'utilisateur & mot de passe pour votre connexion

Cela devrait être le cas!

+0

Impressionnant - ce fut mon problème exactement. Je ne peux pas croire que le pilote ODBC ferait des erreurs comme ceci, mais c'était le cas et maintenant il est corrigé :) – SqlRyan

+0

Nous avons également couru dans ceci, et c'était la résolution. Pour ajouter à notre confusion initiale, le comportement FETCH FIRST que SELECT * présentait apparaissait lorsque la clause WHERE utilisait l'une des 3 colonnes sur 7 ... utilisant l'autre 4, ou s'exécutant sans WHERE, renvoyait les résultats attendus. –

+0

Basculer (à partir du fournisseur Microsoft OLE DB pour les pilotes ODBC) vers ** Oracle Provider pour OLE DB ** a fonctionné. Merci. Assurez-vous de faire correspondre x64 -> (téléchargements ODAC (Oracle Data Access Components) 64 bits) au serveur SQL. Merci. – Finkel

0

J'ai eu ce même problème en utilisant le client instantané Oracle 10 et ODBC. J'ai utilisé ce client comme je me connecte à une base de données Oracle 10gR2.J'ai ouvert un ticket avec le support de Microsoft et ils ont suggéré d'utiliser le client instantané Oracle 11. Surprise! La désinstallation du client instantané 10g, l'installation du client instantané 11g et le redémarrage ont résolu le problème.

Ken