Bonjour,
Je viens de lutter un peu pour créer un serveur lié vers une base DB2 AS400 en passant par le provider IBMDASQL.
1/ Cela fonctionne en exécutant ça:
select * from OpenQuery(MYLINKEDSERVER, 'SELECT CHG0TD FROM xphafgsta.GGICHL01 WHERE xphafgsta.GGICHL01.CHGI06=10542647')
Par contre cela ne fonctionne pas si mon appel se fait comme ça (je cherche en effet à pouvoir contourner le fait que l'on ne peut pas de base passer de paramètres à openQuery), bien que c'est un contournement qui a été validé sur ce forum par exemple :
1 2 3 4 5
| declare @TSQL varchar(8000), @VAR int
select @VAR = 10542647
select @TSQL = 'select * from OpenQuery(MYLINKEDSERVER, ''SELECT CHG0TD FROM xphafgsta.GGICHL01 WHERE xphafgsta.GGICHL01.CHGI06=' + convert(varchar, @VAR) + ''')'
print @TSQL
exec(@TSQL) |
Cela donne l'erreur suivante, bien que le print donne exactement la même chose que mon code qui s'exécute correctement plus haut :
select * from OpenQuery(MYLINKEDSERVER, 'SELECT CHG0TD FROM xphafgsta.GGICHL01 WHERE xphafgsta.GGICHL01.CHGI06=10542647')
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "IBMDASQL" for linked server "MYLINKEDSERVER" reported an error. Access denied.
Msg 7350, Level 16, State 2, Line 1
Cannot get the column information from OLE DB provider "IBMDASQL" for linked server "MYLINKEDSERVER".
2/ Idéalement, je trouverais plus propre de passer mon appel de cette manière :
SELECT * FROM MYLINKEDSERVER.xphafgsta.GGICHL01 WHERE GENIUSTEST.xphafgsta.GGICHL01.CHGI06=10542647
Mais je ne comprends pas pourquoi dans ce cas j'ai le message d'erreur suivant :
Msg 208, Level 16, State 1, Line 1
Invalid object name 'MYLINKEDSERVER.xphafgsta.GGICHL01'.
Partager