使用 odbc/DBI 从 R 中的存储过程结果中检索输出

Retrieve output from stored procedure result in R with odbc/DBI

我正在尝试调用存储过程并检索输出。我正在使用 DBI-compliant odbc 包调用 SQL 服务器。我怎样才能使用这个包?下面的代码returns受影响的行数

sql     <- "EXEC schema.prc_person @name_first='bob'"
channel <- DBI::dbConnect(odbc::odbc(), dsn="db-remote")
guy     <- DBI::dbExecute( channel, sql)
DBI::dbDisconnect(channel); rm(channel)

存储过程基本上是一个 SELECT 查询,但封装了一些计算,这就是为什么这不是一个直接的查询。

SELECT value 
FROM schema.tbl_person
WHERE name_first=@name_first --plus some other stuff in the WHERE clause

作为参考,这两个语句满足了我的需要(使用 RODBC and RODBCext 包)。同样在 odbc 包中,我尝试了 dbCallProc()dbSendQuery()dbSendStatement().

channel <- RODBC::odbcConnect(dsn="db-remote")
guy     <- RODBCext::sqlExecute(channel, "EXEC schema.tbl_person @name_first='bob'", fetch=T) # Notice the 'fetch' parameter
RODBC::odbcClose(channel); rm(channel)

channel <- RODBC::odbcConnect(dsn="db-remote")
guy     <- RODBC::sqlQuery(channel, "EXEC schema.tbl_person @name_first='bob'")
RODBC::odbcClose(channel); rm(channel)

您可以使用 dbGetQuery:

sql     <- "EXEC schema.prc_person @name_first='bob'"
channel <- DBI::dbConnect(odbc::odbc(), dsn="db-remote")
guy     <- DBI::dbGetQuery(channel, sql)
DBI::dbDisconnect(channel); rm(channel)