我有一个R脚本从Windows上的R studio获取SQL查询的结果,而不是Linux上的Rapache。我的两个连接字符串是:
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配置文件,并查看来自Rapache的查询的BatchStarting和BatchCompleted事件。我将查询复制并传递到SSDT并返回行。在Rstudio中,我可以查看()结果数据帧。在rapache中,我这样说:
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()
或其他什么吗?
答案 0 :(得分:1)
我遇到了windows / linux的行为差异,并通过windows和linux版本之间的以下修改解决了这个问题:
Windows上的:
dbhandle <- odbcDriverConnect(paste("driver={SQL Server};server=", ...
linux上的:
dbhandle <- odbcDriverConnect(paste("driver=SQLServer;server=", ...
区别在于声明驱动程序,有/无花括号以及SQL
和Server
之间的空格
仍在寻找为什么的解释,但这有效...
答案 1 :(得分:0)
所以问题似乎是我在声明之前声明了变量,如下所示:
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中。我将调查究竟发生这种情况的原因。