簡體   English   中英

在 R 中使用參數調用 SQL Server 存儲過程

[英]call a SQL Server Stored Procedure with Parameter in R

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

這就是我所擁有的,但它不起作用:

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()

謝謝。

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()

只是為了澄清,在上面的代碼中,** 不應該包含在代碼中,所以它應該說: data <-sqlQuery(dbhandle, "set nocount on\\nEXEC my_Stored_Proc @jyear=2013, @ddate=9 /25/2013")

這對我有用。 感謝所有回答的人。

這是答案:

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
)
}

我使用了“SET NOCOUNT ON”版本的解決方案。 但是存儲過程被執行並突然停止。 所以我決定使用“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

我正在使用 RSQLS 庫連接到 SQL Server。 我使用“con”作為我的連接變量,“param”作為我的所有參數,在這種情況下它們是日期。 要解決的問題是 paste() 不會單獨保留嵌入的單引號,因此您必須建立過程調用。

fromdate<-"2020-06-01"
thrudate<-"2021-05-31"

# param is not special, just a variable name
param<-paste( "'", fromdate, "', '",thrudate,"' ",  sep="")

# call the procedure
df <- pull_data(con,  paste(" EXEC myProcedure", param), showprogress = TRUE)

# this gets passed to pull_data(): 
#        " EXEC myProcedure '2020-06-01', '2021-05-31' "

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM