2010-12-07 49 views
1

J'ai donc établi une connexion entre mon SQL Server 2008 Express Edition et notre base de données Oracle. Lorsque j'interroge les valeurs basées sur varchar, c'est bon, mais pour toute valeur numérique, cela me renvoie une erreur comme celle-ci.Connectivité de base de données à l'aide du serveur lié. (Valeurs numériques)

Msg 9803, Level 16, State 1, Line 1 
Invalid data for type "numeric". 

Comment puis-je contourner le problème?

Répondre

3

J'ai rencontré moi-même. Votre erreur est due au fait que les champs Nombre ne sont pas correctement gérés par le lien. Le moyen le plus correctif est de jeter un varchar dans votre OPENQUERY, et de jeter en arrière à un certain nombre de l'autre côté

SELECT CONVERT(INT, YourField) AS YourField 
FROM OPENQUERY (LINKEDSERVER, 
'SELECT TO_CHAR(YourField) AS YourField FROM RemoteTable'); 
+0

Les conversions supplémentaires entraîneront-elles un surcoût inutile pouvant affecter les performances? –

+0

@red tiger - peut-être, mais jusqu'à présent c'est la solution * only * que j'ai trouvée pour sql 2008, donc ça ne peut pas être considéré comme "inutile". (Votre solution de patch ne fonctionne pas dans mon environnement) –

1

Une personne a dit qu'ils ont trouvé la réponse dans Metalink DocID 369814,1 Oracle. Ils ont dit que la solution consiste à installer un pilote Oracle OLEDB avec la version minimale 10.2.0.2.20. Ils ont installé un client Oracle 10.2.0.3 puis ont appliqué le correctif applicable (décrit dans le document Metalink DocID 369814.1). J'ai trouvé ce poste au http://forums.oracle.com/forums/thread.jspa?threadID=337842&start=15&tstart=135.

Cela semble être une meilleure solution que la conversion en un type de données char, puis la conversion en un type de données numérique. Je suppose que ces conversions vous coûteront en performance.

1

Nous avons rencontré le même problème dans l'un de nos environnements et le problème était que nous avions mal configuré le serveur lié.

Nous l'avons modifié pour Microsoft OLD DB Provider pour Oracle et les problèmes ont été résolus. J'espère que cela t'aides.