2009-06-24 2 views
2

SAS의 Proc SQL을 사용하면 SAS Dataset의 레코드를 열린 SQL Server 연결의 테이블에 삽입 할 수 있습니까? 이런 식으로 뭔가 (작동하지 않는) : 제가 알기로SAS 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; 

답변

3

, 통과를 사용하여 SQL을 통해 데이터베이스 서버에 당신을 제한합니다. SAS 문서에서는 데이터베이스에 대한 라이브러리 참조를 생성 한 다음 SAS 테이블과 마찬가지로 데이터베이스 테이블을 처리해야합니다. 귀하의 경우에는 이것은 정상적인 proc SQL을 의미합니다. 이것은 적어도 최신 SAS 버전에서 작동해야하지만 큰 테이블의 경우 최적이 아닙니다. 우리가 이것을 회피하기 위해 수행 한 어떤

  1. 임시 데이터베이스에서 테이블을 작성합니다 - 표 시저를 사용하여, 세션 별 SAS에서
  2. 대량로드 데이터를 생성 테이블에 안 추가
  3. 업데이트 통과
  4. 임시 db에 테이블을 놓습니다.

    는 관련 LIBNAME을 만들 당신이 열려있는 연결 내에서 원하는 것을 할 수
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; 

은 위의 의사 코드는 당신에게 그것이 작동하는 방법의 아이디어를 줄 것이다. proc SQL에서도 "some_temp_table"을 생성하거나 영구 스테이징 테이블을 사용할 수 있습니다.

관련 문제