代码之家  ›  专栏  ›  技术社区  ›  Jaakko Seppälä

不会执行从SQL Server中的表生成的R代码

  •  0
  • Jaakko Seppälä  · 技术社区  · 8 年前

    我试图运行从中给定的数据库创建的R代码 How to make R-code from SQL Server database?

    这是我试过的。

    declare @t table(f1 int, f2 int)
    insert into @t values (1,2),(3,4),(5,6)
    
    declare @rcode nvarchar(max) = 
    concat(
    'f1=c(', STUFF( (SELECT concat(',', f1)
                FROM @t
                ORDER BY f1
                FOR XML PATH('')),1, 1, ''),')
    f2=c(',  STUFF( (SELECT concat(',', f2)
                FROM @t
                ORDER BY f1
                FOR XML PATH('')),1, 1, ''),')'
            )
    
    select @rcode
    EXECUTE sp_execute_external_script
        @language = N'R'
       , @script = N'@rcode'
    

    代码输出


    使用HRESULT 0x80004004执行“sp\u execute\u external\u script”期间发生“R”脚本错误。

    Msg 39019,16级,状态1,第0行

    源中出错(revoScriptConnection):

    1: @
    ^


    eval中出错(expr、envir、enclose):
    定标器出错。检查输出以了解更多信息。
    调用:源->可见->评估->评估->。呼叫
    执行已暂停

    https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/rtsql-create-a-predictive-model-r

    如何查看从表中的数据生成的R代码的结果?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Arun Gurunathan    8 年前

    @script参数需要一个字符串值用作R脚本。在本例中,传递的字符串是“@rcode”。要分配变量@rcode的值,请使用不带引号的命令。

    declare @t table(f1 int, f2 int)
    insert into @t values (1,2),(3,4),(5,6)
    
    declare @rcode nvarchar(max) = 
    concat(
    'f1=c(', STUFF( (SELECT concat(',', f1)
                FROM @t
                ORDER BY f1
                FOR XML PATH('')),1, 1, ''),')
    f2=c(',  STUFF( (SELECT concat(',', f2)
                FROM @t
                ORDER BY f1
                FOR XML PATH('')),1, 1, ''),')'
            )
    
    select @rcode
    EXECUTE sp_execute_external_script
        @language = N'R'
       , @script = @rcode
    
        2
  •  0
  •   Jaakko Seppälä    8 年前

    DROP PROCEDURE IF EXISTS alpha;
    GO
    CREATE PROCEDURE alpha
    AS
    BEGIN
        EXEC sp_execute_external_script
        @language = N'R'
        , @script = N'R-code'
        , @input_data_1 = N'SQL SELECT statement'
        , @input_data_1_name = N'Test'
    END;
    GO
    EXEC alpha;