Я пытаюсь запустить это простое доказательство концепции:
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 в виде таблицы.В настоящее время я получаю:
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