2017-10-13 22 views
0

Je lance une requête sur un serveur lié (IBM DB2). La raison pour laquelle je fais cela est qu'il faut beaucoup de temps pour exécuter une requête simple. ci-dessous sont les deux requêtes, le premier fonctionne avec succès la question est donc pas à la requêteImpossible d'exécuter openquery sur le serveur lié

select top 10 * from [AS400TS_LNK].[TEST].[AUPRDDBF].CONTACCT where actrno = '8971' 

    select * from openquery(AS400TS_LNK, 'select * from [TEST].[AUPRDDBF].CONTACCT where actrno = ''8971''') 

et l'erreur que je reçois lors de l'exécution de la requête ouverte

fournisseur OLE DB « DB2OLEDB » pour le serveur lié "AS400TS_LNK" a renvoyé le message "Token * N n'était pas valide Jetons valides: * N SQLSTATE: 42601, SQLCODE: -104".

Msg 7321, Niveau 16, État 2, Ligne 1

Une erreur est survenue lors de la préparation de la requête "select * from [AS400TS_LNK]. [TEST]. [AUPRDDBF] .CONTACCT où actrno = '8971'" pour l'exécution contre le fournisseur OLE DB "DB2OLEDB" pour le serveur lié "AS400TS_LNK".

+1

Juste une supposition sauvage, mais facile à tester. Essayez de supprimer les crochets de l'instruction 'openquery' ... – user1429080

+0

Comme l'a mentionné @ user1429080, l'utilisation de crochets pour les guillemets est une chose SQL Server; envoyer un SQL standard au serveur distant, en utilisant des guillemets doubles pour les identifiants si nécessaire (ce qui n'est pas le cas ici de toute façon). – mustaccio

Répondre

1

Essayez ceci:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT where actrno = ''8971''') 

Ou, à défaut, essayez ceci:

select * 
from openquery(AS400TS_LNK, 'select * from TEST.AUPRDDBF.CONTACCT') 
where actrno = '8971' 
+0

Merci beaucoup qui a fonctionné !!!! et le temps d'exécution de la requête est également court. – user2802027