我想知道在此代码中通过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处理结果记录?
答案 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运行外部查询。