SAS连接到SQL Server并返回参数

时间:2018-10-19 13:53:47

标签: sql-server sas

我想要将来自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 个答案:

答案 0 :(得分:1)

可以通过insert将其存储到临时表中来捕获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;

此答案基于How to Get the Output of a Stored Procedure into a Table格雷格·拉尔森(Greg Larsen),2016年11月的信息

答案 1 :(得分:0)

这是9.3的文档所说的:

  

由DBMS生成的任何返回码或消息均可用   在语句后的宏变量SQLXRC和SQLXMSG中   执行。有关更多信息,请参见关系数据库的宏变量。   有关这些宏变量的信息。

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

您尝试过吗?发生什么事了?