Запрос 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. Я собираюсь выяснить, почему именно это происходит.

Другие вопросы по тегам