2011-04-30 2 views
0

De mon ordinateur portable 32bit-Windows (Vista) j'ai besoin de R pour interroger une base de données MS SQL Server 2008 sur un 64bit-Windows (Server 2008) sur un autre ordinateur (via internet).Mauvais requête-résultat avec R

Si j'utilise SQL Studio Server sur mon ordinateur portable pour se connecter à la base de données et d'envoyer cette requête:

SELECT * from mytable where id = 1111111111111110032 

je reçois la réponse
id, .....
1111111111111110032, ... ..

C'est exact. Je reçois le disque que je demande.

Mais si j'écris ceci dans R:

library(RODBC) 
My_conn <- odbcConnect("myODBC_connection", uid="abc123", pwd="abc123") 
tbl_Calls <- sqlQuery(My_conn, "SELECT * from mytable where id = 1111111111111110032") 

je reçois la réponse
id, .....
1111111111111110128, .....

En d'autres termes, je obtenir un autre record que j'ai demandé (celui qui se termine par ... 128 au lieu de ... 032). Je sais que ce n'est pas la requête elle-même qui est le problème, car cela a fonctionné à partir de SQL Studio.

Je n'ai aucune idée de ce qui pourrait se tromper. Le 32bit vs 64bit est-il un problème? Dans ma connexion ODBC, j'utilise "SQL Server" (6.00.6002.18005).

Ce n'est probablement pas un problème de type R, mais je ne sais pas par où commencer ... Peut-être que c'est parce que l'identifiant a 19 numéros de long?

/Chris

+0

Avez-vous essayé de tester d'autres requêtes pour déterminer si elle est cette requête particulière qui vous donne des problèmes, ou toutes les questions? Je pense juste à haute voix ici ... FWIW J'utilise une machine Windows 32 bits et je me connecte au serveur 64 bits sans problèmes tous les jours. – Chase

+0

Merci pour la suggestion, j'ai encore essayé, et maintenant je pense qu'il est lié au nombre de caractères dans les critères WHERE (111 ... 032, c'est-à-dire 19 caractères). J'ai fait le traçage d'ODBC et bien que je ne le comprenne pas, j'obtiens "-3, Longueur de Chaîne Invalide". Mais comment le réparer? – Chris

Répondre

0

J'ai trouvé le problème et une solution "sale". Le problème n'était pas dans la question, mais dans une réponse erronée de l'id-field. C'est à dire. la question et l'enregistrement reçu étaient corrects, sauf le très long champ que j'utilisais.

Pour le bénéfice des autres, voici la solution.

tbl_Calls_2 <- sqlQuery(My_conn, "SELECT id, LEFT(id,10) as LeftId, RIGHT(id,9) as RightId from mytable where id = 1111111111111110032") 
attach(tbl_Calls_2) 
tbl_Calls_2$CorrectId <- paste(LeftId,RightId,sep="") 
detach(tbl_Calls_2) 

Si quelqu'un connaît une meilleure solution, je l'apprécierais.

/Chris