2014-12-11 62 views
1

我想在SAS中編寫一個傳遞查詢,但我不想帶回結果,我想將結果存儲在Teradata中。SAS:如何在不返回結果的情況下編寫Teradata查詢傳遞?

在Teradata的SQL我可以做

create table db.table2 as (select 
     column1, 
     column2, 
     count(*) as cnt 
    from 
     db.table1 
    group by 
     column1, column2 
    having cnt = 1) with data primary index(column1, column2) 
) 

在SAS有是返回一些成果轉化爲SAS傳遞查詢的唯一例子。在這種情況下,我只想使用SAS在Teradata上創建一個表,而無需離開SAS接口(我可以在Teradata Studio Express中執行此操作),但它會打破工作流程。

如何在不返回結果的情況下做「傳遞」?下面似乎並不奏效。我想要做什麼的權利?

PROC SQL; 
    CONNECT TO TERADATA(user="user" password="pw" server ="Teradata.something.somehwere"); 


    drop table teradata.sometable ; 

    DISCONNECT FROM TERADATA; 
QUIT; 
+0

如果您包含一個假查詢返回例如1排? – user667489 2014-12-11 08:42:06

+0

有些事情,比如在許多情況下創建/刪除表,您可以從LIBNAME連接執行 - 在這裏可行嗎? – Joe 2014-12-11 16:15:33

回答

4

您需要EXEC聲明:

PROC SQL; 
    CONNECT TO TERADATA(user="user" 
         password="pw" 
         server ="Teradata.something.somehwere"); 

    EXEC() BY TERADATA; 
    EXEC(Commit) BY TERADATA; /* this is needed if the above statement modifies the database in anyway) */ 

    drop table teradataserver.sometable ; 
    DISCONNECT FROM TERADATA; 
QUIT; 

你可以插入將在DB運行,並保持對DB結果的Teradata的SQL語句中的括號內。因此,在全:

PROC SQL; 
    CONNECT TO TERADATA(user="user" 
         password="pw" 
         server ="Teradata.something.somehwere"); 

    EXEC(
     create table db.table2 as 
     (
     select 
     column1, 
     column2, 
     count(*) as cnt 
     from 
     db.table1 
     group by 
     column1, column2 
     having cnt = 1 
     ) with data primary index(column1, column) 
    ) BY TERADATA; 

    DISCONNECT FROM TERADATA; 
QUIT; 

對於信息的BY部分指定該數據庫來處理的聲明,如果我們連接到不止一個DB SQL過程,例如內

PROC SQL; 
    CONNECT TO TERADATA AS T1 (...); 
    CONNECT TO TERADATA AS T2 (...); 
    EXEC(...) by T1; 
    EXEC(...) by T2; 
    DISCONNECT FROM T1; 
    DISCONNECT FROM T2; 
QUIT; 
+0

當我嘗試運行代碼時出現此錯誤,並且出現此錯誤錯誤:Teradata執行:DDL語句後只有COMMIT WORK或NULL語句合法。這是什麼意思? – xiaodai 2014-12-11 22:19:40

+0

您可能需要在第一次EXEC後立即添加該語句,例如TERADATA提供的EXEC(COMMIT WORK);',這是因爲你要求通過提交'CREATE TABLE'來更改數據庫,然後嘗試斷開而不提交更改。 – mjsqu 2014-12-11 22:49:17

+1

答案似乎在http://support.sas.com/kb/5/966.html – xiaodai 2014-12-11 22:55:54