将多个参数传递给[sp_execute_external_script]以执行R代码

时间:2018-01-24 04:34:04

标签: sql r stored-procedures sp-executesql rtvs

以下是我尝试传递三个参数即empid2Name1& DOB1。我无法传递参数并在OutPutDataset获取结果数据框。 观察:使用一个参数传递我得到的结果但是有多个参数我无法获得输出数据框。

ALTER procedure [dbo].[spGetAllEmployees] 
@empid2 int,
@Name1 Varchar(50)
--@DOB1 Date   
as    
Begin    
Declare @empid int
Declare @NewName varchar(50)

EXECUTE sp_execute_external_script
 @language = N'R'
,@script = N'df <- as.data.frame(InputDataSet);df[,1] <- df[,1]+1;OutputDataSet <-df'
,@input_data_1 = N'select * from tblEmployee where EmployeeId=@empid AND Name=@NewName'
,@params = N'@empid Int OUTPUT'
,@empid = @empid2
,@NewName =@Name1
--,@NewDOB=@DOB1
WITH RESULT SETS (([Col1] Int, [Col2] varchar(50), [Col3] varchar(50), Col4 varchar(50),Col5 varchar(50)));

End

-- EXEC dbo.spGetAllEmployees @empid2 ='1', @Name1='Nabi';  

具有以上参数empid2Name1&amp;来自给定数据框/数据表的DOB1我们正在尝试对表进行子集化 Sub setting the Table with 3 Parameter and process through RScript and data in OutputDataset

1 个答案:

答案 0 :(得分:3)

您需要在查询中编写输出语法@Params

ALTER procedure [dbo].[spGetAllEmployees] 
        @empid2 int,
        @Name1 Varchar(50),
        @DOB1 Date   
    as    
    Begin    
    Declare @empid int
    Declare @NewName varchar(50)
    Declare @NewDOB Varchar(50)

        EXECUTE sp_execute_external_script
         @language = N'R'
        ,@script = N'df <- as.data.frame(InputDataSet);df[,1] <- df[,1]+1;OutputDataSet <-df'
        ,@input_data_1 = N'select * from tblEmployee where EmployeeId=@empid AND Name=@NewName AND DOB=@NewDOB'
        ,@params = N'@empid Int OUTPUT,@NewName varchar(50) OUTPUT,@NewDOB Varchar(50) OUTPUT'
        ,@empid = @empid2
        ,@NewName =@Name1
        ,@NewDOB=@DOB1
        WITH RESULT SETS (([Col1] Int, [Col2] varchar(50), [Col3] varchar(50), Col4 varchar(50),Col5 varchar(50),Col6 varchar(50)));

    End

    -- EXEC dbo.spGetAllEmployees @empid2 ='1', @Name1='Nabi',@DOB1='2017-04-01';