使用 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 版本,但对于大型表来说并不是最佳选择。

我们为避免这个问题所做的就是

  1. 在临时数据库中创建表 - 该表不应特定于会话
  2. 使用 procappend 将数据从 SAS 批量加载到创建的表
  3. 进行直通更新
  4. 将表删除到临时数据库中。

其他提示

您可以做你想做的开放连接中..

创建关联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”,以及或者有永久性临时表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top