当 运行 R 来自 SQL 服务器时如何 return 一个变量
How to return a variable when Running R from SQL Server
我正在尝试通过存储过程从 SQL 服务器 运行 一个基本的 R 脚本。我正在 return 创建一个数据集,还想 return/output 一个变量,但我做不到。
下面是我的存储过程
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
我调用程序如下:
declare @OutputVar float
exec @OutputVar = get_iris_dataset
print @OutputVar
它确实输出了数据集,但我无法存储 OutputVar 的值。
即使我不输出数据集,我也无法 return OutputVar 的值,只能尝试捕获 OutputVar 的值。
感谢任何帮助。
提前致谢!
我要做的是使用 StoredProcedure
函数(sqlrutils 包的一部分,它又是 MS R Server 9.0.1 的一部分)将 R 代码包装到存储过程中。这与您的原始代码略有不同,因为 return 值包含在列表中。但是思路还是一样的
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)
完成后,您可以在 SSMS 中右键单击该过程,select "execute Stored Procedure",SSMS 将为您生成一些代码。代码将如下所示:
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
如果你只想要输出数字,你可以将代码简化为:
DECLARE @out_outer float
EXEC [dbo].[spTestFunc]
@out_outer = @out_outer OUTPUT
SELECT 'Return Value' = @out_outer
GO
我正在尝试通过存储过程从 SQL 服务器 运行 一个基本的 R 脚本。我正在 return 创建一个数据集,还想 return/output 一个变量,但我做不到。
下面是我的存储过程
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
我调用程序如下:
declare @OutputVar float
exec @OutputVar = get_iris_dataset
print @OutputVar
它确实输出了数据集,但我无法存储 OutputVar 的值。
即使我不输出数据集,我也无法 return OutputVar 的值,只能尝试捕获 OutputVar 的值。 感谢任何帮助。
提前致谢!
我要做的是使用 StoredProcedure
函数(sqlrutils 包的一部分,它又是 MS R Server 9.0.1 的一部分)将 R 代码包装到存储过程中。这与您的原始代码略有不同,因为 return 值包含在列表中。但是思路还是一样的
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)
完成后,您可以在 SSMS 中右键单击该过程,select "execute Stored Procedure",SSMS 将为您生成一些代码。代码将如下所示:
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
如果你只想要输出数字,你可以将代码简化为:
DECLARE @out_outer float
EXEC [dbo].[spTestFunc]
@out_outer = @out_outer OUTPUT
SELECT 'Return Value' = @out_outer
GO