如何将SQL Server表导入itab?

时间:2013-02-23 14:58:35

标签: sql-server sap abap

是否可以直接将SQL Server表中的数据导入SAP ABAP内部表?

我想在SE37功能中使用这个itab。提前谢谢

2 个答案:

答案 0 :(得分:2)

对于您的任务,您可以使用功能模块(SE37),也可以使用模块池或报告(SE38,SE80)。查看此报告:

report zinsertdb.

data: oref   type ref to cx_root,
      p_conex type dbcon_name value 'YOUR_DB_CONNECTION_STRING', " Ask the basis for this
      lv_sw type c,
      errormessage type string.

data it_mydata type standard table of mara.

start-of-selection.

  perform connect.
  perform insert_into_db.
  perform disconnect.

form connect.
  try.
      EXEC SQL.
        CONNECT TO :p_conex
      ENDEXEC.
      lv_sw = 'X'.
    catch cx_sy_native_sql_error into oref.
      lv_sw = space.
      errormessage = oref->get_text( ).
  endtry.
endform.

form disconnect.
  clear errormessage.
  if lv_sw = 'X'.
    try.
        EXEC SQL.
          COMMIT
        ENDEXEC.
      catch cx_sy_native_sql_error into oref.
        errormessage = oref->get_text( ).     
    endtry.
  endif.
endform.

form insert_into_db.

   data wa_mydata like line of it_mydata.
   data zcount type i.

   select * from mara into corresponding fields of table it_mydata.

   if sy-subrc EQ 0.

     loop at it_mydata into wa_mydata.

        try .

            exec sql. 
              EXECUTE PROCEDURE sp_get_data ( IN :wa_mydata-EAN11, IN :wa_mydata-MEINS, OUT :zcount ) 
            endexec.

            if zcount eq 0.
              exec sql.
                INSERT INTO "Your_Database".dbo.[Your_table]
                (Field1, Field2, Field3, FieldN)
                 VALUES (:wa_mydata-matnr,
                         :wa_mydata-ean11,
                         :wa_mydata-matkl,
                         :wa_mydata-meins)
              endexec.
              lv_sw = 'X'.
            endif.

          catch cx_sy_native_sql_error into oref.
            lv_sw = space.
            errormessage = oref->get_text( ).   
        endtry.

     endloop.

   endif.

endform.

希望它有所帮助。

答案 1 :(得分:1)

你想做什么并不是很清楚。我假设您的意思是您想要将整个SQL表(或其中的某些条目)读入程序存储器?也许你可以在这里说明一些事情?

如果是这种情况,则只需声明一个内部表,该表具有包含数据的SQL表结构。

DATA: table_name TYPE STANDARD/HASHED/SORTED TABLE OF name_of_sql_table.

FIELD-SYMBOLS <structure> TYPE name_of_sql_table.

SELECT * FROM name_of_sql_table INTO TABLE table_name.

从那里开始,它只是从内部表中读取数据。

READ TABLE table_name ASSIGNING <structure> WITH KEY table_key_field(s) = condition(s).

但是,正如贾格尔所说,要小心你的桌子有多大。