Pergunta

Usando o SAS Proc SQL, existe uma maneira de inserir registros de um SAS Dataset em uma tabela na conexão aberta SQL Server? Algo como isso (que não funciona):

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;
Foi útil?

Solução

Para meu conhecimento, utilizando passagem SQL restringe-lo para o servidor de banco de dados. O documentantion SAS diz que você deve de preferência criar uma referência biblioteca para o banco de dados e, em seguida, tratar as tabelas de banco de dados como tabelas SAS. No seu caso, isso significa sql proc apenas normal. Isso deve funcionar, pelo menos nas últimas versões SAS, mas para grandes tabelas não é o ideal.

O que temos feito para contornar esta é

  1. Criar uma tabela em um banco de dados temporário - a tabela não deve ser específica a uma sessão
  2. dados de carga a granel de SAS para a tabela criada, utilizando proc anexar
  3. Faça o repasse update
  4. Solte a tabela no db temporário.

Outras dicas

Você pode fazer o que quiser dentro de uma conexão aberta ..

criar um libname associado ..

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;

O código pseudo acima deve dar-lhe uma idéia de como ele deve funcionar. Pode ser necessário criar o "some_temp_table" no SQL proc bem ou ter uma tabela de preparação permanente disponíveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top