2009-06-24 8 views
2

Использование SAS Proc SQL, есть ли способ вставить записи из набора данных SAS в таблицу в открытом соединении SQL Server? Что-то вроде этого (что не работает):SAS Proc SQL Database Table Вставить

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

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

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

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

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

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

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