如何处理 SQL 过程中多个表的输出?

Posted

技术标签:

【中文标题】如何处理 SQL 过程中多个表的输出?【英文标题】:How to process output of multiple tables from SQL procedure? 【发布时间】:2016-09-12 09:58:31 【问题描述】:

我有一个生成两个表作为输出的过程,但是当我运行它时会产生错误。我想将两个表都传递给局部变量。

DECLARE @model_data_stats TABLE (var VARCHAR(150), center FLOAT, scale FLOAT);
DECLARE @model_log_stats TABLE (var VARCHAR(150), zero INT, plusone INT, plustwo INT);
DECLARE @model_logit VARBINARY(MAX);

EXEC sp_execute_external_script @language = N'R',
     @script = N'
       #R script, irrelevant to question
       #the following variables are assigned:
       data_stats <- table
       log_stats <- table
       trained_model <- varbinary(max) data type
     ',
     @input_data_1 = N'SELECT * FROM dbo.Table',
     @params = N'@data_stats TABLE (var VARCHAR(150), center FLOAT, scale FLOAT) OUTPUT,
                 @log_stats TABLE (var VARCHAR(150), zero INT, plusone INT, plustwo INT) OUTPUT,
                 @trained_model VARBINARY(MAX)',
     @data_stats = @model_data_stats OUTPUT,
     @log_stats = @model_log_stats OUTPUT,
     @trained_model = @model_logit OUTPUT;

这是我运行代码时遇到的错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'TABLE'.

我什至不清楚TABLE 的哪个出现会产生错误,但我的猜测是定义输出变量的部分(在@params 之后)。 DECLARE 语句本身运行良好。

我的猜测是我以错误的方式声明过程的输出。我不确定正确的方法是什么。非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

经过进一步研究,我发现我在这里尝试做的事情是不可能的。来自MS knowledge base:

在 SQL Server 2016 中,存储过程 sp_execute_external_script 的 R 输出仅限于单个 data.frame 或数据集。 (将来可能会取消此限制。)

但是,除了数据集之外,您还可以返回其他类型的输出。例如,您可以使用单个数据集作为输入来训练模型,但返回一个统计表作为输出,以及作为对象的训练模型。

【讨论】:

以上是关于如何处理 SQL 过程中多个表的输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理数据库远程调用失败问题

我们如何处理具有单个实体类的多个存储过程

编译数据库项目时如何处理临时表

ip报文发送时进行分片 在发送过程中丢失一个或是多个片时如何处理 以及如何分辨丢失与否?

在从 Postgres 9.4 到 Greenplum 的数据迁移过程中,我应该如何处理我的 UNIQUE 约束

如何处理包含需要执行的 SQL 语句字符串的表列?