wib*_*ley 5 sql-server odbc stored-procedures r r-dbi
我正在尝试调用存储过程并检索输出。我正在使用符合DBI的odbc包调用 SQL Server。我该如何使用这个包?以下代码返回受影响的行数。
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)
Run Code Online (Sandbox Code Playgroud)
存储过程基本上是一个SELECT查询,但封装了一些计算,这就是为什么这不是一个直接的查询。
SELECT value
FROM schema.tbl_person
WHERE name_first=@name_first --plus some other stuff in the WHERE clause
Run Code Online (Sandbox Code Playgroud)
作为参考,这两个语句满足我的需要(使用RODBC和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)
Run Code Online (Sandbox Code Playgroud)
您可以使用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)
Run Code Online (Sandbox Code Playgroud)