2014-10-09 79 views
0

我有一個R腳本,用於從R Studio的SQL查詢獲取結果,而不是Linux上的Rapache。我的兩個連接字符串是:RODBC查詢返回來自Windows的結果,但不是來自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中並返回行。在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

爲什麼你有兩個連接字符串?第二個只是覆蓋第一個。其中一個字符串是你在windows上使用的,另一個是你在linux上使用的嗎? – 2014-10-14 18:10:03

+0

@DavidMarxyes是正確的。我在Linux上使用FreeTDS,在Windows上使用Microsoft驅動程序。 – 2014-10-15 13:25:37

回答

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。我要去調查爲什麼發生這種情況。

1

我碰到了行爲上的窗口/ Linux的差異,並與Windows和Linux版本之間的以下修改解決了這個問題:

在Windows上:

dbhandle <- odbcDriverConnect(paste("driver={SQL Server};server=", ... 

在Linux上:

dbhandle <- odbcDriverConnect(paste("driver=SQLServer;server=", ... 

區別只在於聲明驅動程序,with/witho UT大括號和SQLServer

之間的空間仍在尋找的爲什麼這工作雖然一個解釋......