【问题标题】:execute R via sp_execute_external_script throws Procedure expects parameter '@params' of type 'ntext/nchar/nvarchar'通过 sp_execute_external_script throws 执行 R 过程需要“ntext/nchar/nvarchar”类型的参数“@params”
【发布时间】:2018-11-20 12:47:19
【问题描述】:

我正在尝试运行这个简单的概念证明:

DECLARE @p1 INT;
DECLARE @p2 INT;

    SET @p1 = 1;
    SET @p2 = 2;

    execute sp_execute_external_script
        @language=N'R',
        @script=N'inp_dat <- InputDataSet
                  inp_dat$sum <- inp_dat$p1 + inp_dat$p2
                  new_dat <- inp_dat',
        @input_data_1 = N'SELECT @p1 AS p1, @p2 AS p2',
        @output_data_1 = N'newdat';

这里有 2 个参数作为表传递给 R,然后 R 创建一个计算列并将 R 数据框作为表返回。我目前得到:

Procedure expects parameter '@params' of type 'ntext/nchar/nvarchar'.

有什么想法吗?

PS:

这在我得到总和的意义上是有效的:

DECLARE @p1 int;
DECLARE @p2 int;

SET @p1 = 2;
SET @p2 = 3;

DECLARE @inquery NVARCHAR(MAX)
SET @inquery = N'SELECT ' + CAST(@p1 AS NVARCHAR(MAX)) + N' AS p1, ' + CAST(@p2 AS NVARCHAR(MAX)) + N' AS p2;'

DECLARE @sum FLOAT; 

EXEC sp_execute_external_script
  @language =N'R',
  @script=N'
            sum <- InputDataSet[1,1] + InputDataSet[1,2]
          ',
  @input_data_1 = @inquery, 
  @params = N'@sum FLOAT OUTPUT',
  @sum = @sum OUTPUT 
  ;

  SELECT @sum AS SUM
GO

PPS:

到达那里 - 唯一的问题 - 未返回数据框的列名:

DECLARE @p1 int;
DECLARE @p2 int;

SET @p1 = 2;
SET @p2 = 3;

DECLARE @inquery NVARCHAR(MAX)
SET @inquery = N'SELECT ' + CAST(@p1 AS NVARCHAR(MAX)) + N' AS p1, ' + CAST(@p2 AS NVARCHAR(MAX)) + N' AS p2;'

DECLARE @sum FLOAT; 

EXEC sp_execute_external_script
  @language =N'R',
  @script=N'
            sum <- InputDataSet[1,1] + InputDataSet[1,2]
            InputDataSet$sum <- InputDataSet$p1 + InputDataSet$p2
            OutputDataSet <- InputDataSet
          ',
  @input_data_1 = @inquery, 
  @params = N'@sum FLOAT OUTPUT',
  @sum = @sum OUTPUT 
  ;

  SELECT @sum AS SUM
GO

【问题讨论】:

    标签: r sql-server-2017


    【解决方案1】:

    我刚刚遇到this excellent series,这导致我找到了这个解决方案:

    DECLARE @p1 int;
    DECLARE @p2 int;
    
    SET @p1 = 2;
    SET @p2 = 3;
    
    DECLARE @inquery NVARCHAR(MAX)
    SET @inquery = N'SELECT ' + CAST(@p1 AS NVARCHAR(MAX)) + N' AS p1, ' + CAST(@p2 AS NVARCHAR(MAX)) + N' AS p2;'
    
    DECLARE @sum FLOAT; 
    
    EXEC sp_execute_external_script
      @language =N'R',
      @script=N'
                InputDataSet$sum <- InputDataSet$p1 + InputDataSet$p2
                OutputDataSet <- InputDataSet
              ',
      @input_data_1 = @inquery 
      WITH RESULT SETS(( p1 INT,p2 INT,[sum] INT))
    ;
    

    【讨论】:

    猜你喜欢
    • 2016-12-25
    • 2020-01-28
    • 2014-12-07
    • 2018-03-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多