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データセットにアクセスできるストアドプロシージャがない限り?それが可能かどうかはわかりません.)

ただし、libnameconnection を使用してテーブルを作成してから、 を使用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;

注意すべきことは、これらは 2 つの別個のセッションであるため、セッション固有の一時テーブルを使用できないことです。永続テーブルを使用するか、セッション間で持続する何かを使用する必要があります。

于 2013-10-22T17:58:06.560 に答える