Вставка таблицы базы данных SQL SAS Proc - PullRequest
2 голосов
/ 25 июня 2009

Используя 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;

Ответы [ 2 ]

3 голосов
/ 25 июня 2009

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

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

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

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

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

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 или иметь постоянную промежуточную таблицу.

...