我想要将来自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
答案 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中 执行。有关更多信息,请参见关系数据库的宏变量。 有关这些宏变量的信息。
您尝试过吗?发生什么事了?