Вставка таблицы базы данных SQL SAS Proc

С помощью Proc SQL от SAS можно ли вставить записи из набора данных 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 ответа

Решение

Насколько мне известно, использование прохода через SQL ограничивает вас на сервере базы данных. Документация SAS гласит, что предпочтительно создать ссылку на библиотеку в базе данных, а затем обрабатывать таблицы базы данных точно так же, как таблицы SAS. В вашем случае это означает просто обычный процесс sql. Это должно работать по крайней мере в последних версиях SAS, но для больших таблиц не является оптимальным.

Что мы сделали, чтобы обойти это

  1. Создайте таблицу во временной базе данных - таблица не должна быть специфичной для сессии
  2. Массовая загрузка данных из SAS в созданную таблицу с использованием процедуры добавления
  3. Сделать сквозное обновление
  4. Оставьте таблицу в темп дБ.

Вы можете делать то, что вы хотите в открытом соединении..

создать связанное имя библиотеки..

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;

Приведенный выше псевдокод должен дать вам представление о том, как он должен работать. Вам также может понадобиться создать "some_temp_table" в proc sql proc или иметь постоянную промежуточную таблицу.

Другие вопросы по тегам