문제

SAS의 Proc SQL을 사용하면 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;
도움이 되었습니까?

해결책

내가 아는 한, Pass를 사용하여 SQL을 사용하면 데이터베이스 서버에 제한됩니다. SAS DocumentAntion은 데이터베이스에 대한 라이브러리 참조를 선호하고 SAS 테이블처럼 데이터베이스 테이블을 처리해야한다고 말합니다. 귀하의 경우 이것은 정상적인 Proc SQL을 의미합니다. 이것은 최소한 최신 SAS 버전에서 작동하지만 큰 테이블의 경우 최적이 아닙니다.

우리가 이것을 우회하기 위해 한 일은입니다

  1. 임시 데이터베이스에서 테이블 만들기 - 테이블은 세션 별이어서는 안됩니다.
  2. Proc Append를 사용하여 SAS에서 생성 된 테이블로의 대량로드 데이터
  3. 업데이트를 통해 패스를 수행하십시오
  4. Temp db로 테이블을 떨어 뜨립니다.

다른 팁

열린 연결 내에서 원하는 것을 할 수 있습니다 ..

연관된 libname을 만듭니다 ..

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"을 만들거나 영구 스테이징 테이블을 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top