题
使用 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;
解决方案
据我所知,使用 SQL 传递会将您限制在数据库服务器上。SAS 文档指出,您应该最好创建对数据库的库引用,然后像对待 SAS 表一样对待数据库表。在你的情况下,这意味着只是普通的 proc sql。这至少应该适用于最新的 SAS 版本,但对于大型表来说并不是最佳选择。
我们为避免这个问题所做的就是
- 在临时数据库中创建表 - 该表不应特定于会话
- 使用 procappend 将数据从 SAS 批量加载到创建的表
- 进行直通更新
- 将表删除到临时数据库中。
其他提示
您可以做你想做的开放连接中..
创建关联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”,以及或者有永久性临时表。
不隶属于 StackOverflow