簡體   English   中英

SAS Proc SQL數據庫表插入

[英]SAS Proc SQL Database Table Insert

使用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. 使用proc append將數據從SAS批量加載到創建的表
  3. 通過更新
  4. 將表放在temp db中。

您可以在打開的連接中執行所需的操作。

創建一個關聯的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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM