如何将sp_execute_external_script的返回值存入SQL变量供后续使用
解决方法
你之前的写法没有将R侧的计算结果和SQL输出参数做绑定,OutputDataSet是用来返回结果集的对象,不会自动赋值给自定义的输出参数。有两种常用实现方案:
方案1:直接使用R输出参数回传标量值(推荐,性能最优)
不需要将计算结果包成data.frame,直接在R侧声明和输出参数同名的变量即可直接回传:
DECLARE @UpDiv FLOAT; EXECUTE sp_execute_external_script @language = N'R', @script = N' -- R侧直接把计算结果赋值给和输出参数同名的变量 UpDiv <- qgamma(p=(0.05/2), shape=315, scale=1); ', @params = N'@UpDiv FLOAT OUTPUT', @UpDiv = @UpDiv OUTPUT; -- 变量已完成赋值,可直接在后续逻辑中使用 SELECT @UpDiv AS UpDivResult;
注意:R对变量名大小写敏感,需要保证R侧的变量名和
@params中定义的输出参数名完全一致。
方案2:接收OutputDataSet结果集再赋值
如果你需要保留OutputDataSet的写法(比如后续要扩展返回多个计算值),可以先将结果集插入表变量,再读取赋值给标量变量:
DECLARE @UpDiv FLOAT; -- 定义表变量接收R返回的结果集 DECLARE @TempResult TABLE (CalcValue FLOAT); INSERT INTO @TempResult(CalcValue) EXECUTE sp_execute_external_script @language = N'R', @script = N' OutputDataSet <- as.data.frame(qgamma(p=(0.05/2), shape=315, scale=1)); '; -- 从表变量中读取结果赋值给标量变量 SELECT @UpDiv = CalcValue FROM @TempResult; SELECT @UpDiv AS UpDivResult;
内容的提问来源于stack exchange,提问作者NHLToPDX
相关产品推荐
相关产品推荐

