SAS传递SQL - 多个DB

时间:2013-10-08 18:52:40

标签: sql sas pass-through

我想从DB2中检索与DB1表中的标识符匹配的记录列表,例如常规SAS子查询。如何使用SAS传递SQL执行此操作?

使用常规SAS SQL在db1上执行(长而复杂的)SQL太慢了,这就是我使用传递SQL的原因。

我尝试了以下但没有运气:

proc sql;
    connect to db1 as A (user=&userid. password=&userpw.  database=MY_DB);
    connect to db2 as B (user=&userid. password=&userpw.  database=MY_DB);

    create table test as
    select * from connection to B (
        select * from schema.table
            Where ID_NUM =
                (select * from connection to A
                      (select ID_NUM from schema2.table2)
                );
        );
   disconnect from A;
   disconnect from B;
quit;

2 个答案:

答案 0 :(得分:3)

如果您要连接到单个DB2实例并在不同的模式/数据库中连接两个表,则以下内容适用于您:

proc sql;
    connect to db2 as B (user=&userid. password=&userpw.  database=MY_DB);

    create table test as
    select * from connection to B (
            /* here we're in DB2 SQL */
        select t1.* from schema.table as t1
                inner join schema2.table2 as t2
            on t1.ID_NUM = t2.ID_NUM
        );
   /* automatic disconnect at PROC SQL boundary */
quit;

如果您与两个不同的服务器/两个用户帐户通信,则可以使用不通过传递的异构连接。那么预期的ID_NUM值就很重要了。

答案 1 :(得分:1)

您不能对另一个传递查询执行传递查询,除非您的两个数据库以某种方式自然连接,您可以在本机系统中利用这些连接。

执行此类操作的唯一方法是执行connection to A查询并将结果存储在宏变量(ID_NUM列表)中,然后将该宏变量插入查询{{1 }}

最好不要在这里明确使用passthrough,而是使用connection to B并像往常一样执行查询。 SAS可能会帮助你在这里完成工作,而不是先实际复制B的所有行。