Неправильный запрос-результат с R

#r #odbc

#r #odbc

Вопрос:

С моего ноутбука с 32-разрядной версией Windows (Vista) мне нужен R для запроса базы данных MS SQL Server 2008 на 64-разрядной версии Windows (Server 2008) на другом компьютере (через Интернет).

Если я использую SQL Server Studio на своем ноутбуке для подключения к базе данных и отправки этого запроса:

 SELECT * from mytable where id = 1111111111111110032
  

Я получаю ответ

идентификатор, …..
1111111111111110032, …..

Это правильно. Я получаю запись, которую запрашиваю.

Но если я напишу это в R:

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

Я получаю ответ

идентификатор, …..
1111111111111110128, …..

Другими словами, я получаю другую запись, чем я просил (ту, которая заканчивается на … 128 вместо … 032). Я знаю, что проблема не в самом запросе, поскольку он работал из SQL Studio.

Я понятия не имею, что может быть не так. Является ли 32-битная версия 64-битной проблемой? В моем ODBC-соединении я использую «SQL Server» (6.00.6002.18005).

Вероятно, это не проблема R, но я не знаю, с чего еще начать… Может быть, это потому, что идентификатор имеет длину 19 чисел?

/Крис

Комментарии:

1. вы пробовали тестировать другие запросы, чтобы определить, этот конкретный запрос доставляет вам проблемы или все запросы? Просто размышляю вслух… К настоящему времени я использую 32-разрядный компьютер с Windows и ежедневно подключаюсь к 64-разрядному серверу без проблем.

2. Спасибо за предложение, я попробовал еще раз, и теперь я думаю, что это связано с количеством символов в WHERE-критериях (111 … 032, то есть 19 символов). Я выполнил трассировку ODBC, и хотя я этого не понимаю, я получаю «-3, недопустимая длина строки». Но как это исправить?

Ответ №1:

Я нашел проблему и «грязное» решение. Проблема была не в вопросе, а в ошибочном ответе поля 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)
  

Если кто-нибудь знает более приятное решение, я был бы признателен.

/Крис