繁体   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