SAS SQL Pass Through

时间:2016-09-12 18:39:09

标签: sql-server-2008-r2 sas

我想知道在此代码中通过SAS SQL传递首先执行的内容:

Connect To OLEDB As MYDB ( %DBConnect( Catalog = MYDB ) ) ;

 Create table MYDB_extract as
   select put(Parent,$ABC.) as PARENT,
          put(PFX,z2.) as PFX,* 
    From Connection To MYDB
     ( SELECT
           Appointment,Parents,Children,Cats,Dogs 
       FROM MYDB.dbo.FlatRecord
        WHERE Appointment between '20150801' and '20150831' 
           And Children > 2);
Disconnect from MYDB;

由于MS SQL-Server不支持PUT函数,否则此查询会导致所有记录在本地处理或仅从DBMS处理结果记录?

2 个答案:

答案 0 :(得分:0)

显式传递查询仍将处理并将返回SAS返回的内容(无论多少记录)。然后,SAS将对返回的行执行put操作。

因此,如果表中有10000行,并且500行符合where中的条件,则500条记录将转至SAS,然后为put; SQL将处理10000 - > 500。

如果你在隐式传递中写了这个,那么SAS可能(如果不可能)可能已完成所有工作。

答案 1 :(得分:0)

首先,内联视图中的代码将在服务器上执行:

SELECT Appointment,Parents,Children,Cats,Dogs 
FROM   MYDB.dbo.FlatRecord
WHERE  Appointment between '20150801' and '20150831' And Children > 2 

符合该WHERE子句的行将由DBMS通过OLDEB连接返回给SAS。

然后SAS将(尝试并)从该结果集中选择 ,应用任何其他代码,包括put函数。

这与内联视图在任何其他DBMS中的工作方式没有任何不同,除了这里有两个不同的数据库引擎,一个运行内部查询,SAS运行外部查询。