【问题标题】:Stored procedure parameters to R存储过程参数到 R
【发布时间】:2017-06-12 15:43:35
【问题描述】:

我正在尝试使用传递给存储过程的参数在 R-Services 中运行一个简单的 R sum,但我不知道该怎么做,也找不到一个好的例子。这是我目前所拥有的:

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 呼叫返回什么?一个错误?没有结果?
  • 消息是:消息 214,级别 16,状态 179,过程 sp_execute_external_script,第 1 行过程需要类型为“nvarchar(max)”的参数“@input_data_1”。

标签: sql-server r microsoft-r


【解决方案1】:

考虑使用@params 将SQL Server 参数传递给R 变量,如MS docs 所示。请务必始终返回一个数据框对象,并将 @input_data_1 留给您需要传递到 InputDataSet 数据框对象中的 R 脚本的 SQL Server 查询(因此此处为空白)。

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

【讨论】:

  • 感谢您的回答。它可以工作,但我必须删除 R 脚本中的 @ 才能使其 (SumRes = sum(a_r, b_r)) 请在最适合您的时候编辑答案。
  • 确实...对不起,这个小小的疏忽!感谢@HongOoi 的编辑。很高兴能提供帮助。
【解决方案2】:

在查询下方运行

EXEC dbo.TEST 2,  3

【讨论】:

  • 与EXEC dbo.TEST有什么区别@a = 2, @b = 3
【解决方案3】:
Field1 <- 'fd'
Field2 <- '20'
query <- paste0(
  "exec df_test @Name = ", Field1, ", @ProductNumber = ", Field2, ""
)
sqlQuery(cn, query)
odbcClose(cn)

像这样为 r 代码执行存储过程

编码愉快... :)

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2017-11-22
    • 2011-07-09
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多