Вопрос

С помощью 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;
Это было полезно?

Решение

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

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

<Ол>
  • Создайте таблицу во временной базе данных - таблица не должна быть специфичной для сессии
  • Массовая загрузка данных из SAS в созданную таблицу с использованием proc append
  • Выполните сквозное обновление
  • Оставьте таблицу в базе данных temp.
  • Другие советы

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top