2016-09-12 11 views
0

У меня есть процедура, которая генерирует две таблицы в качестве вывода, но при ее запуске она генерирует ошибку. Я хочу передать обе таблицы в локальные переменные.Как обрабатывать вывод нескольких таблиц из процедуры SQL?

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 сами по себе работают отлично.

Я предполагаю, что я объявляю вывод процедуры неправильным образом. Я не уверен, какой будет правильный путь. Помощь будет принята с благодарностью!

ответ

0

После некоторых дальнейших исследований я обнаружил, что то, что я пытаюсь сделать здесь, невозможно. Из MS knowledge base:

В SQL Server 2016, выходной сигнал R из хранимой процедуры sp_execute_external_script ограничивается одной data.frame или набора данных. (Это ограничение может быть удалено в будущем.)

Однако вы можете возвращать выходные данные других типов в дополнение к набору данных. Например, вы можете обучить модель с использованием единого набора данных в качестве входных данных, но возвращать таблицу статистики в качестве результата, а также обучаемую модель как объект.