2017-03-08 2 views
0

Ich versuche, ein Basis-R-Skript von SQL Server über eine gespeicherte Prozedur auszuführen. Ich gebe ein Dataset zurück und möchte auch eine Variable zurückgeben/ausgeben, bin aber nicht dazu in der Lage.Zurückgeben einer Variablen beim Ausführen von R von SQL Server

Im Folgenden finden Sie die gespeicherte Prozedur I

DROP PROC IF EXISTS get_iris_dataset; 
go 
CREATE PROC get_iris_dataset 
AS 
BEGIN 
declare @OutName float 
EXEC sp_execute_external_script 
    @language = N'R' 
, @script = N' 
    iris_data <- iris 
    out = 5.1;' 
, @input_data_1 = N'' 
, @output_data_1_name = N'iris_data' 
,@params= N'@out float OUTPUT' 
,@out = @OutName OUTPUT 

WITH RESULT SETS (("Sepal.Length" float not null, 
     "Sepal.Width" float not null, 
    "Petal.Length" float not null, 
    "Petal.Width" float not null, "Species" varchar(100))); 
END; 
return 0 
go 

Ich rufe das Verfahren, wie unten haben:

declare @OutputVar float 
exec @OutputVar = get_iris_dataset 
print @OutputVar 

Es tut Ausgang der Datensatz, aber ich bin nicht in der Lage, den Wert der zu speichern, Ausgabevariable

Ich kann den Wert von OutputVar nicht ausgeben, auch wenn ich das Dataset nicht ausgeben und nur versuchen, den Wert von OutputVar zu erfassen. Jede Hilfe wird geschätzt.

Vielen Dank im Voraus!

+0

Ich sehe keinen R-Code hier. –

+0

Es gibt nur 2 Zeilen R-Code. iris_data <- iris, out = 5,1; –

Antwort

1

Was ich tun würde, ist die Verwendung der StoredProcedure-Funktion (Teil des sqlrutils-Pakets, das wiederum Teil von MS R Server 9.0.1 ist), um den R-Code in eine gespeicherte Prozedur zu wickeln. Dies unterscheidet sich geringfügig von Ihrem ursprünglichen Code, da die Rückgabewerte in eine Liste eingeschlossen sind. Aber die Idee ist immer noch dieselbe.

library(sqlrutils) 

testfunc <- function() 
{ 
    iris_dataset <- iris 
    out <- 5.1 
    list(iris_dataset=iris_dataset, out=out) 
} 

sp <- StoredProcedure(testfunc, "spTestFunc", 
    OutputData("iris_dataset"), 
    OutputParameter("out", "numeric"), 
    connectionString="<your_connection_string>") 

registerStoredProcedure(sp) 

das getan haben, können Sie mit der rechten Maustaste auf das proc in SSMS, wählen Sie "Stored Procedure Execute" und SSMS wird für Sie einen Code generieren. Der Code wird wie folgt aussehen:

USE [databasename] 
GO 

DECLARE @return_value int, 
     @out_outer float 

EXEC @return_value = [dbo].[spTestFunc] 
     @out_outer = @out_outer OUTPUT 

SELECT @out_outer as N'@out_outer' 

SELECT 'Return Value' = @return_value 

GO 

Und wenn Sie die Ausgangsnummer möchten, können Sie den Code unten zu diesem vereinfachen:

DECLARE @out_outer float 

EXEC [dbo].[spTestFunc] 
     @out_outer = @out_outer OUTPUT 

SELECT 'Return Value' = @out_outer 
GO 
+0

Vielen Dank für Ihre Hilfe, aber da ich neu in SQL Server mit R bin, bin ich ein wenig verwirrt. Ich bin mir nicht sicher, wie ich den ersten Teil des Codes ausführen soll (d. H. Beginnend mit library (sqlrutils) und endend mit registerStoredProcedure (sp)). Führe ich dieses Stück Code in SSMS, ohne es in etwas zu verpacken? Bitte helfen Sie. –

+0

Dieser Code ist R-Code. Sie führen es in einer R-Sitzung aus. –

+0

Erstelle ich eine Verbindungszeichenfolge, damit R weiß, wo dieser gespeicherte Proc gespeichert/gespeichert werden soll? –

Verwandte Themen