使用SAS的Proc SQL,有没有办法将SAS数据集中的记录插入到打开的SQL Server连接中的表中?像这样的东西(不起作用):
proc sql exec;
connect to sqlservr as DataSrc (server=my-db-srvr database=SasProcSqlTest);
create table Items as select * from connection to DataSrc (
SELECT * FROM tblItem
);
update Items
set Name = Name + Name,
Value * 2;
insert into tblItem (Name, Value)
select Name, Value
from Items;
disconnect from DataSrc;quit;run;
quit;
run;
答案 0 :(得分:3)
据我所知,使用pass through SQL约束你到数据库服务器。 SAS文档说明您应该首选创建对数据库的库引用,然后像SAS表一样处理数据库表。在你的情况下,这意味着正常的proc sql。这应该至少在最新的SAS版本中起作用,但对于大型表格来说并不是最佳的。
我们为避免这种情况所做的是
答案 1 :(得分:2)
你可以在开放的连接中做你想做的事情..
创建一个关联的libname ..
libname datasrc_lib sqlservr server=my-db-srvr database=SasProcSqlTest;
proc sql exec;
connect to sqlservr as DataSrc (server=my-db-srvr database=SasProcSqlTest);
create table Items as select * from connection to DataSrc (
SELECT * FROM tblItem
);
update Items
set Name = Name + Name,
Value * 2;
insert into datasrc_lib.some_temp_table select * from items;
execute( insert into tblItem where select * from some_temp_table ) by DataSrc ;
execute( drop table some_temp_table ) by DataSrc ;
disconnect from DataSrc;quit;run; quit; run;
上面的伪代码应该让你知道它应该如何工作。您可能还需要在proc sql中创建“some_temp_table”,或者可以使用永久临时表。