سؤال

باستخدام 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.في حالتك هذا يعني مجرد proc SQL عادي.من المفترض أن يعمل هذا على الأقل في أحدث إصدارات SAS، ولكنه ليس الحل الأمثل بالنسبة للجداول الكبيرة.

ما فعلناه للتحايل على هذا هو

  1. قم بإنشاء جدول في قاعدة بيانات مؤقتة - يجب ألا يكون الجدول خاصًا بالجلسة
  2. تحميل البيانات بشكل مجمّع من SAS إلى الجدول الذي تم إنشاؤه باستخدام إلحاق proc
  3. قم بالمرور عبر التحديث
  4. قم بإسقاط الجدول في قاعدة البيانات المؤقتة.

نصائح أخرى

ويمكنك أن تفعل ما تريد في اتصال مفتوح ..

وخلق libname المرتبطة ..

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" في SQL بروك كذلك أو لديك جدول انطلاق دائم المتاحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top