2009-06-24 7 views
2

À l'aide de Proc SQL de SAS, existe-t-il un moyen d'insérer des enregistrements d'un ensemble de données SAS dans une table dans la connexion SQL Server ouverte? Quelque chose comme ça (ce qui ne fonctionne pas):Insertion de table de base de données SQL Proc SQL

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; 

Répondre

3

A ma connaissance, à l'aide passe par SQL vous contraint au serveur de base de données. La documentation de SAS indique que vous devriez préférablement créer une référence de bibliothèque à la base de données, puis traiter les tables de la base de données comme des tables SAS. Dans votre cas, cela signifie simplement proc sql normal. Cela devrait fonctionner au moins dans les dernières versions de SAS, mais pour les grandes tables, ce n'est pas optimal.

Ce que nous avons fait pour contourner cela est

  1. Créer une table dans une base de données temporaire - la table ne doit pas être spécifique à la session
  2. de données de charge en vrac de SAS à la table créée, en utilisant proc
  3. Effectuez la mise à jour de traversée
  4. Supprimez la table dans temp db.
2

Vous pouvez faire ce que vous voulez dans une connexion ouverte ..

créer un libname associé ..

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; 

Le pseudo-code ci-dessus devrait vous donner une idée de la façon dont il devrait fonctionner. Vous devrez peut-être également créer le fichier "some_temp_table" dans le fichier proc sql ou disposer d'une table temporaire permanente.

Questions connexes