2013-09-26 41 views
6

任何人都可以提供代碼來調用SQL服務器R中的參數存儲過程?調用R參數中的SQL Server存儲過程

這是我的全部,它不工作:

dbhandle <- odbcDriverConnect('driver={SQL Server};server=SWD-CHISSIS01;database=GlobalRiskManagement;trusted_connection=true') 
data <-sqlQuery(dbhandle, "EXEC my_Stored_Proc @jyear=2013, @ddate=9/25/2013") 
odbcCloseAll() 

謝謝。

+0

根據我的經驗,ODBC連接!=能夠執行任何db命令,就像我手動登錄數據庫一​​樣。可能取決於司機。但我不認爲你可以做任何事情,但你的基本選擇/更新/刪除等。 – joran

+0

好的。有沒有其他的方法來調用R中的SQL SERVER存儲PROC與參數?謝謝! – user2821029

+0

不是我知道的,沒有。如果你可以從其他地方(比如bash腳本)做到,你可以通過'system'從R中調用bash腳本。但我只是認爲ODBC連接不支持這一點,這是我知道的從R連接到sql server的唯一選項。 – joran

回答

0

下面是答案:

library(RODBC) 

GetData <- function (Field1) { 
    conn<- odbcDriverConnect('driver={SQL Server};server=SERVER;database=DATABASE;trusted_connection=yes') 

    data <- sqlQuery(conn,paste("exec my_STOREDPROC @Field1= '", Field1 , "';",sep =""),errors=FALSE) 
    odbcCloseAll() 
    data 
) 
} 
+2

你能詳細解釋一下你的答案嗎?例如什麼是Field1? – NoThanks

1
dbhandle <- odbcDriverConnect('driver={SQL Server};server=SWD-CHISSIS01;database=GlobalRiskManagement;trusted_connection=true') 
data <-sqlQuery(dbhandle, "**set nocount on\n**EXEC my_Stored_Proc @jyear=2013, @ddate=9/25/2013") 
odbcCloseAll() 
+0

這是你的答案或什麼? – kenorb

+2

雖然這可能會回答這個問題,但在回答中插入一些文字以解釋您所做的事情總是一個好主意。閱讀[如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer)。 – jurgemaister

+1

SET NOCOUNT ON是解決方案的關鍵。雖然我還沒有弄清楚如何參數化查詢(只是使用SQL注入技術) - 我無法獲取任何數據,直到將SET NOCOUNT添加到我的命令中。我明白爲什麼但不確定這是討論它的地方。基本上,RODBC庫正在從SQL Server獲取第一個響應(這是來自每個子命令的行計數)。 – ripvlan

0

我用了 「SET NOCOUNT ON」 版本的解決方案。但存儲過程被執行並突然停止。所以我決定使用命令shell使用「sqlcmd」命令。在這裏,我做了一個功能:

callStoredProc = function(server,BD,storedProc,sParams){ 
    sFileName = paste("log_",gsub(":", "_", gsub("-", "_", gsub("\\.", "_", Sys.time()))),storedProc,".txt",sep="") 
    sQuery = paste("sqlcmd -E -S ",server," -d ",BD," -Q \"EXECUTE ",storedProc," ",sParams,"\" -o \"",sFileName,"\"", sep="") 
    shell(sQuery) 
}#callStoredProc 
0

只是爲了澄清,將在上面的代碼中,**的不應該包含在代碼,所以應該說: 數據< -sqlQuery(數據庫句柄,「集在\ nEXEC my_Stored_Proc @ jyear = 2013,@ ddate = 9/25/2013" )NOCOUNT

這對我的作品。感謝所有回覆的人。

相關問題