我想在具有OUTPUT
参数的(Microsoft)SQL Server(2012)上执行存储过程,并希望将结果集以及输出值读回到R. / p>
有没有办法
我当前解决方法的示例(使用RODBCext
代替RODBC
来阻止SQL代码注入):
-- example stored procedure
CREATE PROCEDURE output_test
@ID INT,
@result INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
SELECT @result = 42 -- OUTPUT parameter
-- FROM whateveryouwant
-- WHERE ID = @ID
SELECT * FROM anothertable WHERE ID = @ID -- result set
END
使用RODBCext
在R中解决问题(如果我将ID粘贴到RODBC
查询字符串中,也会与sql
一起使用):
library(RODBCext)
con <- odbcConnect("TEST_DATABASE")
# first query to get the OUTPUT parameter
sql <- "DECLARE @result_output INT;
EXECUTE output_test @ID = ?, @result = @result_output OUTPUT;
SELECT @result_output AS result"
result <- RODBCext::sqlExecute(con, query = sql, data = list(ID = 100), fetch = TRUE)
# second query to get the result set
sql2 <- "EXECUTE output_test @ID = ?, @result = @result_output OUTPUT;"
resultset <- RODBCext::sqlExecute(con, query = sql2, data = list(ID = 100), fetch = TRUE)
odbcClose(con)
PS:这里有相关的问题没有提供我问题的完整解决方案,例如: G: