【问题标题】:Insert into Proc SQL Passthrough in SAS在 SAS 中插入 Proc SQL Passthrough
【发布时间】:2013-10-22 17:52:10
【问题描述】:

我有一台 SQL Server 2012 机器,它托管一个数据库,其中包含我定期查询的大量数据。为了进行查询,我需要上传唯一 ID 列表,然后查询与这些唯一 ID 相关的数据。为了在如此多的数据和缓慢的连接下使事情顺利进行,我正在使用 PROC SQL 传递工具来进行选择。我想知道的是我是否也可以使用传递工具从本地 SAS 数据集进行插入?我目前正在使用 libname 语句进行连接,然后在 PROC SQL 中使用“connect to”语句进行连接,但这并不优雅。

我想做这样的事情:

connect to odbc as SQL_SERVER (datasrce=...);
INSERT INTO CONNECTION TO SQL_SERVER...

这个可以吗?

【问题讨论】:

    标签: sql-server odbc sas proc-sql


    【解决方案1】:

    这样做在技术上是可行的,但可能不是最好的方法。

    您可以将插入数据放入宏变量中,然后将INSERT INTO 与该信息一起使用,就好像它是程序语句中的纯文本一样。你不能完全按照你的要求去做(除非你通过 SAS 的 ODBC 驱动程序从 SQL Server 连接到 SAS,并且有一些可以访问 SAS 数据集的存储过程?不确定这是否可能。)

    但是,更好的方法是使用libname连接创建表,然后使用passthrough进行选择。

    libname sqlserv odbc (...);
    proc sql;
    connect to odbc as sql_server( ...);
    create table sqlserv.temptable (select * from whatever);
    select * from connection sql_server (... your other query, which can access temptable ...);
    quit;
    

    需要注意的是,这是两个单独的会话,因此您不能使用特定于会话的临时表 - 您必须使用永久表,或者在会话之间持续存在的其他东西。

    【讨论】:

    • 我害怕那个。我希望避免两次提示用户输入密码,我想这可以通过宏变量和一些窗口代码来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多