2017-06-12 21 views
3

我想在R-Services中使用交给存储过程的参数运行一个简单的R和,但我不知道如何去做,也没有找到一个好例子。这是我到目前为止有:存储过程参数到R

IF OBJECT_ID ('TEST', 'P') IS NOT NULL 
    DROP PROCEDURE TEST; 
GO 

CREATE PROCEDURE TEST @a int = 0, @b int = 0 AS 
BEGIN 
    EXEC sp_execute_external_script 
    @language = N'R' 
    ,@script = N'print(sum(@a, @b))' -- how to pass params here? 
    ,@input_data_1 = N'@a' 
    return @a + @b; 
END 

EXEC dbo.TEST @a = 2, @b = 3 
GO 

我的问题是如何在存储过程(@a@b)读取变量传递到R脚本?下面的查询

EXEC dbo.TEST 2, 3 
+0

什么是您目前的' EXEC'电话回复?一个错误?没有结果? – Parfait

+0

消息是:消息214,级别16,状态179,过程sp_execute_external_script,第1行过程期望类型为'nvarchar(max)'的参数'@ input_data_1'。 – Leo

回答

1

+0

感谢解答。它可以工作,但我必须删除R脚本中的@以使其成为(SumRes = sum(a_r,b_r))请在最适合您时编辑答案。 – Leo

+0

的确...对于那个小小的忽略感到抱歉!感谢@HongOoi的编辑。乐意效劳。 – Parfait

0

运行考虑使用@params通过SQL服务器PARAMS到R参数如本MS docs。请务必始终返回一个数据框对象,并将需要传递到InputDataSet dataframe对象中的R脚本的SQL Server查询留给@input_data_1(因此在此处为空)。

CREATE PROCEDURE myProc (@a int, @b int) 
AS 
    EXEC sp_execute_external_script  
     @language = N'R'  
    , @script = N' OutputDataSet <- data.frame(SumRes = sum(a_r, b_r));'  
    , @input_data_1 = N' ;' 
    , @params = N' @a_r int, @b_r int' 
    , @a_r = @a 
    , @b_r = @b 
    WITH RESULT SETS (([SumResult] int NOT NULL)); 

然后调用程序:

EXEC dbo.myProc @a = 2, @b = 3 
+0

与EXEC dbo.TEST @a = 2,@ b = 3 – Leo

0
Field1 <- 'fd' 
Field2 <- '20' 
query <- paste0(
    "exec df_test @Name = ", Field1, ", @ProductNumber = ", Field2, "" 
) 
sqlQuery(cn, query) 
odbcClose(cn) 

执行存储过程是这样的R代码

编码快乐... :)