在SQL中实现R会导致参数错误

时间:2018-09-27 13:59:00

标签: sql r stored-procedures parameters external

我正在尝试在SQL脚本中运行R代码。 SQL脚本如下。应当注意,coefficients_mucoefficients_sigmadata_row都是具有单个行的表。 data_row表具有名为Relatienr的列。显然,脚本要复杂得多,但是现在我只希望输入的一部分成为输出。

DROP PROCEDURE IF EXISTS ProduceResults;
GO
CREATE PROCEDURE ProduceResults
AS
BEGIN
    EXEC sp_execute_external_script
    @language = N'R'
    , @script = N'Results <- as.data.frame(data_row$Relatienr)'
    , @input_data_1 = N'SELECT * FROM coefficients_mu'
    , @input_data_1_name = N'coefficients_mu'
    , @input_data_2 = N'SELECT * FROM coefficients_sigma'
    , @input_data_2_name = N'coefficients_sigma'
    , @input_data_3 = N'SELECT * FROM data_row'
    , @input_data_3_name = N'data_row'  
    , @output_data_1_name = N'Results'
    WITH RESULT SETS (([Relatienr] numeric(20, 10)));
END;
GO

EXEC ProduceResults
GO

(如前所述,表coefficients_mucoefficients_sigmadata_row存在,并且在这些表上使用查询时没有问题。)产生以下错误:< / p>

Msg 214, Level 16, State 175, Procedure sp_execute_external_script, Line 1 [Batch Start Line 75]
Procedure expects parameter '@params' of type 'ntext/nchar/nvarchar'.
Msg 11536, Level 16, State 1, Procedure ProduceResults, Line 4 [Batch Start Line 75]
EXECUTE statement failed because its WITH RESULT SETS clause specified 1 result set(s), but the statement only sent 0 result set(s) at run time.

我得到第二个错误的出处:由于第一个错误,存储过程未运行,因此得到0个结果集。

我知道您可以在@params下添加一个@language,但是(1)我不需要它(因为我只是从某些数据库中直接获取输入信息)和(2)即使我显式添加@params = N'',我仍然会收到此错误。

如果实际上是通过@params处理事务,然后使用参数coefficients_mucoefficients_sigmadata_row调用存储过程,那么从技术上讲,这可以解决我的问题,但是我非常有兴趣知道导致此错误的原因。

0 个答案:

没有答案