Frage

Mit SAS Proc SQL, ist es eine Möglichkeit, Datensätze aus einem SAS-Datensatz in eine Tabelle in der offenen SQL Server-Verbindung einfügen? So etwas wie dies (was nicht funktioniert):

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;
War es hilfreich?

Lösung

Mein Wissen Durchlauf durch Verwendung von SQL zwingt Sie zu dem Datenbankserver. Die SAS documentantion sagt, dass man vorzugsweise eine Bibliothek Verweis auf die Datenbank erstellen sollte und behandelt dann die Datenbanktabellen wie SAS-Tabellen. In Ihrem Fall bedeutet dies, nur normale proc sql. Dies sollte in den neuesten SAS-Versionen zumindest arbeiten, aber für große Tabellen nicht optimal ist.

Was wir getan haben, zu umgehen, das ist

  1. Erstellen Sie eine Tabelle in einer temporären Datenbank - die Tabelle sollte nicht sitzungsspezifisch sein
  2. Bulk-Lastdaten von SAS auf die erstellte Tabelle, mit proc append
  3. Sie den Pass durch update
  4. Löschen Sie die Tabelle in Temp db.

Andere Tipps

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

erstellen eine zugehörige 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;

Der obige Pseudo-Code sollten Sie eine Vorstellung davon, wie es funktionieren soll. Möglicherweise müssen Sie die „some_temp_table“ in der proc sql erstellen, wie gut oder haben eine dauerhafte Staging-Tabelle zur Verfügung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top