我正在尝试在SQL脚本中运行R代码。 SQL脚本如下。应当注意,coefficients_mu
,coefficients_sigma
和data_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_mu
,coefficients_sigma
和data_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_mu
,coefficients_sigma
和data_row
调用存储过程,那么从技术上讲,这可以解决我的问题,但是我非常有兴趣知道导致此错误的原因。