2011-04-30 65 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) 

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

/克里斯