2014-12-11 81 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

相关问题