0

我有一台 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...

这可以做到吗?

4

1 回答 1

0

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

您可以将插入数据放入宏变量中,然后将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;

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

于 2013-10-22T17:58:06.560 回答