【问题标题】:SAS SQL Pass ThroughSAS SQL 直通
【发布时间】:2016-09-12 18:39:08
【问题描述】:

我想知道在这段代码中的 SAS SQL pass thru 中首先执行的是什么:

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 的结果记录?

【问题讨论】:

  • 请注意,您引用的变量PFX 未包含在您的查询中。此外,您引用的是 PARENT 而不是 PARENTS。

标签: sql-server-2008-r2 sas


【解决方案1】:

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

所以如果表中有10000行,并且有500行满足where中的条件,那么500条记录将进入SAS,然后是put; SQL 将处理 10000 -> 500。

如果您在 implicit pass through 中编写此代码,那么 SAS 可能已经完成了所有工作(如果不太可能)。

【讨论】:

  • 请注意,Tom 指出的错误在这里仍然存在问题。
【解决方案2】:

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

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 运行外部查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2018-01-22
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多