2011-04-30 66 views
0

从我的32位Windows(Vista)笔记本电脑中,我需要R在另一台计算机上(通过互联网)在64位Windows(Server 2008)上查询MS SQL Server 2008数据库。错误的查询结果与R

如果我使用SQL Server工作室在我的笔记本电脑连接到数据库,并发出此查询:

SELECT * from mytable where id = 1111111111111110032 

我得到的回应
ID,.....
1111111111111110032,... ..

这是正确的。我得到了我要求的记录。

但如果我写这篇文章的R:

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

我得到的回应
ID,.....
1111111111111110128,.....

换句话说,我获得另一个记录比我所要求的(一个以...... 128而不是...... 032结尾)。我知道这不是查询本身,而是SQL Studio的工作原理。

我不知道什么可能是错的。是32位和64位的问题?在我的ODBC连接中,我使用“SQL Server”(6.00.6002.18005)。

这可能不是一个R问题,但我不知道从哪里开始......也许是因为ID是19位数字?

/Chris

+0

你试图测试其他查询,以确定它是否是有问题的时候,或者所有的查询,这个特定的查询?只是在这里大声想... FWIW我使用一个32位的Windows机器,每天连接到64位服务器没有麻烦。 – Chase 2011-05-01 03:13:01

+0

感谢您的建议,我再次尝试,现在我认为它与WHERE标准中的字符数(111 ... 032,即19个字符)有关。我做了ODBC跟踪,虽然我不明白,但确实得到“-3,无效的字符串长度”。但如何解决它? – Chris 2011-05-01 17:07:32

回答

0

我发现了这个问题和一个“脏”的解决方案。问题不在于这个问题,而在于id域的错误回应。即除了我使用的很长的领域之外,问题和收到的记录是正确的。

为了他人的利益,这里是解决方案。

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) 

如果有人知道更好的解决方案,我会很感激。

/克里斯