Вставка таблицы базы данных SQL SAS Proc
Вопрос
С помощью Proc SQL от SAS можно ли вставить записи из набора данных SAS в таблицу в открытом соединении с SQL Server? Примерно так (что не работает):
proc sql exec;
connect to sqlservr as DataSrc (server=my-db-srvr database=SasProcSqlTest);
create table Items as select * from connection to DataSrc (
SELECT * FROM tblItem
);
update Items
set Name = Name + Name,
Value * 2;
insert into tblItem (Name, Value)
select Name, Value
from Items;
disconnect from DataSrc;quit;run;
quit;
run;
Решение
Насколько мне известно, использование прохода через SQL ограничивает вас сервером базы данных. Документация SAS гласит, что предпочтительно создать ссылку на базу данных библиотеки, а затем обрабатывать таблицы базы данных точно так же, как таблицы SAS. В вашем случае это означает просто обычный процесс sql. Это должно работать по крайней мере в последних версиях SAS, но для больших таблиц не является оптимальным.
Что мы сделали, чтобы обойти это,
<Ол>Другие советы
Вы можете делать, что хотите, в открытом соединении.
создайте связанное имя библиотеки ..
libname datasrc_lib sqlservr server=my-db-srvr database=SasProcSqlTest;
proc sql exec;
connect to sqlservr as DataSrc (server=my-db-srvr database=SasProcSqlTest);
create table Items as select * from connection to DataSrc (
SELECT * FROM tblItem
);
update Items
set Name = Name + Name,
Value * 2;
insert into datasrc_lib.some_temp_table select * from items;
execute( insert into tblItem where select * from some_temp_table ) by DataSrc ;
execute( drop table some_temp_table ) by DataSrc ;
disconnect from DataSrc;quit;run; quit; run;
Приведенный выше псевдокод должен дать вам представление о том, как он должен работать. Возможно, вам придется создать " some_temp_table " в proc sql или иметь постоянный промежуточный стол. Р>