2017-06-12 5 views
3

ストアドプロシージャに渡すパラメータを使用してR-Servicesで単純なRの合計を実行しようとしていますが、その方法やわかりやすい例が見つかりません。これは私がこれまで持っているものです。ストアドプロシージャのパラメータをR

IF OBJECT_ID ('TEST', 'P') IS NOT NULL 
    DROP PROCEDURE TEST; 
GO 

CREATE PROCEDURE TEST @a int = 0, @b int = 0 AS 
BEGIN 
    EXEC sp_execute_external_script 
    @language = N'R' 
    ,@script = N'print(sum(@a, @b))' -- how to pass params here? 
    ,@input_data_1 = N'@a' 
    return @a + @b; 
END 

EXEC dbo.TEST @a = 2, @b = 3 
GO 

私の質問は、Rスクリプトにストアドプロシージャ(@a@b)を読み込む変数を渡す方法ですか?クエリ

EXEC dbo.TEST 2, 3 
+0

EXEC'コールリターン?エラー?結果がありません? – Parfait

+0

メッセージは次のとおりです。メッセージ214、レベル16、状態179、プロシージャsp_execute_external_script、行1プロシージャに 'nvarchar(max)'タイプのパラメータ '@ input_data_1'が必要です。 – Leo

答えて

1

以下

+0

とどう違うのですか?それは動作しますが、それを作るためにRスクリプトの@を削除しなければなりませんでした(SumRes = sum(a_r、b_r))。 – Leo

+0

確かに...その小さな見落としには申し訳ありません!編集のために@HongOoiに感謝します。喜んで助けてください。 – Parfait

0

ランは、このMS docsに示すように、R変数にSQL Serverののparamsを渡すために@paramsの使用を検討してください。 InputDataSetデータフレームオブジェクトのRスクリプトに渡す必要があるSQL Serverクエリに対しては、必ずデータフレームオブジェクトを返して、@input_data_1のままにしてください(ここでは空白です)。その後、

CREATE PROCEDURE myProc (@a int, @b int) 
AS 
    EXEC sp_execute_external_script  
     @language = N'R'  
    , @script = N' OutputDataSet <- data.frame(SumRes = sum(a_r, b_r));'  
    , @input_data_1 = N' ;' 
    , @params = N' @a_r int, @b_r int' 
    , @a_r = @a 
    , @b_r = @b 
    WITH RESULT SETS (([SumResult] int NOT NULL)); 

と手続き呼び出し:コーディング

ハッピーRコードのために、このようなあなたのストアドプロシージャを実行し

EXEC dbo.myProc @a = 2, @b = 3 
+0

答えはEXEC dbo.TEST @a = 2、@b = 3 – Leo

0
Field1 <- 'fd' 
Field2 <- '20' 
query <- paste0(
    "exec df_test @Name = ", Field1, ", @ProductNumber = ", Field2, "" 
) 
sqlQuery(cn, query) 
odbcClose(cn) 

を... :) `現在何

関連する問題