SAS Proc SQL数据库表插入

时间:2009-06-24 20:05:39

标签: insert sas proc-sql

使用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;

2 个答案:

答案 0 :(得分:3)

据我所知,使用pass through SQL约束你到数据库服务器。 SAS文档说明您应该首选创建对数据库的库引用,然后像SAS表一样处理数据库表。在你的情况下,这意味着正常的proc sql。这应该至少在最新的SAS版本中起作用,但对于大型表格来说并不是最佳的。

我们为避免这种情况所做的是

  1. 在临时数据库中创建表 - 该表不应是特定于会话的
  2. 使用proc append
  3. 将数据从SAS批量加载到创建的表中
  4. 执行直通更新
  5. 将表放入temp db。

答案 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”,或者可以使用永久临时表。