SAS подключается к SQL Server и возвращает параметр

Я хочу сохранить возвращаемое значение из хранимой процедуры SQL Server в переменной SAS.

Вот мой код:

proc sql;
Connect To OLEDB As MyDb ( Init_String = "  Provider=SQLOLEDB.1; ... )

    Execute (spDamjanTest) by MyDb;

    Disconnect From MyDb;
Quit;

Если я использую код ниже, хранимая процедура выполняется дважды:

     proc sql; 
            connect to oledb as SQLSVR (provider=sqloledb
            properties=("Data Source"=...);
            select *
            from connection to SQLSVR
            (exec spDamjanTest);
            disconnect from SQLSVR;
    quit;

Хранимая процедура:

 CREATE PROCEDURE spDamjanTest
  AS
  Select 5

Всего 2 ответа


Вывод таблицы (позволяет вызвать ее набор результатов) хранимой процедуры SQL Server можно захватить, вставив ее во временную таблицу. После того, как результирующий набор находится во временной ( #<table-name> ) таблице, вы можете выбрать его из SAS.

* libname SS sqlsvr ... ;

proc sql;
  connect using SS;

  execute (
    create table #sp_table_out (
      column1 int
    )
    insert into #sp_table_out exec dbo.spDamjanTest
  ) by SS;

  create table work.sp_output as
  select * from connection to SS
  (
    select * from #sp_table_out 
  );

  execute (
    drop table #sp_table_out
  ) by SS;
quit;

proc print data=work.sp_output;
run;

Этот ответ основан на информации из « Как получить результат хранимой процедуры в таблицу» Грег Ларсен, ноябрь 2016 г.


Это то, что говорится в документах для 9.3:

Любой код возврата или сообщение, генерируемое СУБД, доступно в макропеременных SQLXRC и SQLXMSG после выполнения оператора. См. Макрокоманды для реляционных баз данных для получения дополнительной информации об этих макропеременных.

http://support.sas.com/documentation/cdl/en/acreldb/65247/HTML/default/viewer.htm#n0pj5uu3i328pmn1fackclh2xnd9.htm

Вы пробовали это? Что случилось?


Есть идеи?

10000