Запрос RODBC возвращает результаты из Windows, но не из Linux
У меня есть R-скрипт, который извлекает результаты SQL-запроса из R-студии на Windows, но не Rapache на Linux. Мои две строки подключения:
channel = odbcDriverConnect('Driver=FreeTDS;Server=server\\instance;Database=DB;Uid=name;Pwd=password')
channel = odbcDriverConnect('Driver={SQL Server};Server=name\\instance;Database=DB;Trusted_Connection=True;')
Я создаю некоторый SQL и передаю его этой функции:
get_sql_data <- function(query,as.is=TRUE){
return(sqlQuery(channel, query,as.is=as.is, errors=TRUE))
}
Я смотрю в профиль SQL и вижу событие BatchStarting и BatchCompleted для запроса от Rapache. Я копирую и вставляю запрос в SSDT и получаю строки обратно. В R studio я могу просмотреть () результирующий кадр данных. В рапаче я возглавляю это так:
warning('head head')
warning(head(RESULTS))
warning('head tail')
Я получаю следующее:
2: In eval(expr, envir, enclos) : head head
3: In eval(expr, envir, enclos) :
4: In eval(expr, envir, enclos) : head tail
Что я делаю неправильно? Нужно ли использовать sqlGetResults()
или что-то?
2 ответа
Я столкнулся с разницей в поведении windows/linux и решил ее с помощью следующей модификации между версиями windows и linux:
на окнах:
dbhandle <- odbcDriverConnect(paste("driver={SQL Server};server=", ...
на Linux:
dbhandle <- odbcDriverConnect(paste("driver=SQLServer;server=", ...
разница только в объявлении драйвера, с / без фигурных скобок и пробелом SQL
а также Server
все еще ищет объяснение, почему это работает, хотя...
Таким образом, проблема заключалась в том, что я объявлял переменные перед своим утверждением, например так:
DECLARE @foobar CHAR(3) 'AAA';
SELECT TOP (5) id, name, desc FROM tbl WHERE code = @fooBar;
Меняя это на:
SELECT TOP (5) id, name, desc FROM tbl WHERE code = 'AAA';
Вызвал результирующий набор в Linux, а также в Windows. Я собираюсь выяснить, почему именно это происходит.