2009-06-24 132 views
2

使用SAS的PROC SQL,有沒有插入來自SAS數據集記錄到表中打開SQL Server連接的方法嗎?像這樣的東西(這是行不通的):SAS PROC SQL數據庫表中插入

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; 

回答

3

據我所知,使用通過SQL約束你到數據庫服務器。 SAS文檔說,您應該最好創建對數據庫的庫引用,然後像處理SAS表一樣處理數據庫表。在你的情況這意味着只是正常的PROC SQL。這應該至少在最新的SAS版本中起作用,但對於大型表格並不是最佳的。

我們所做的規避,這是

  1. 在臨時數據庫中創建一個表 - 表不應該是會話特定的自SAS
  2. 批量加載數據到創建的表,使用PROC追加
  3. 通過更新做通
  4. 刪除表中的臨時數據庫。
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」,或者需要永久性的臨時表。