2009-06-24 15 views

Antwort

3

Nach meinem Wissen zwingt Sie die Verwendung von Pass-SQL zum Datenbankserver. Die SAS-Dokumentation besagt, dass Sie vorzugsweise eine Bibliotheksreferenz für die Datenbank erstellen und dann die Datenbanktabellen genau wie SAS-Tabellen behandeln sollten. In Ihrem Fall bedeutet das nur normale proc sql. Dies sollte zumindest in den neuesten SAS-Versionen funktionieren, ist aber bei großen Tabellen nicht optimal.

Was wir dies zu umgehen getan ist

  1. eine Tabelle in einer temporären Datenbank erstellen - die Tabelle sollte nicht sitzungsspezifische
  2. Bulk-Lastdaten von SAS auf die erstellte Tabelle sein, proc anfügen
  3. Führen Sie das Durchlaufupdate durch
  4. Löschen Sie die Tabelle in Temp db.
2

Sie tun können, was Sie in einer offenen Verbindung wollen ..

ein zugehöriges libname erstellen ..

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; 

Die obige Pseudo-Code sollten Sie geben eine Vorstellung davon, wie es funktionieren sollte. Möglicherweise müssen Sie auch "some_temp_table" in der proc-sql erstellen oder eine permanente Staging-Tabelle verfügbar machen.

Verwandte Themen