Появилась потребность работать из системы SAP с базой данных SQL Server
Нашел ноту, в которой были описаны действия, которые необходимо выполнить на сервере SAP для подключения к внешней базе данных SQL Server (в зависимости от версии базы данных). Базис выполнил необходимые действия.
В транзакции DBCO создаём соединение с базой данных:
Используется следующая строка подключения: Provider=SQLOLEDB.1;MSSQL_SERVER=<IP-адрес сервера>;Data Source=<IP-адрес сервера>;MSSQL_DBNAME=<база данных>
Проверку подключения можно выполнить в транзакции DBACOCKPIT в разделе Соединения с базой данных
Подключение к базе данных выполняем с помощью класса cl_sql_connection:
1 2 3 4 5 6 |
DATA: go_conn TYPE REF TO cl_sql_connection. TRY. go_conn = cl_sql_connection=>get_connection( dbcon_name ). CATCH cx_sy_native_sql_error INTO lx_exc. lv_message = lx_exc->get_text( ). ENDTRY. |
Для выполнения запросов к базе данных можно воспользоваться следующим кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DATA: lo_stmt TYPE REF TO cl_sql_statement, lo_rslt TYPE REF TO cl_sql_result_set. DATA: lr_matnr TYPE REF TO data, ls_items LIKE LINE OF ot_items. GET REFERENCE OF ls_items INTO lr_items. REFRESH lt_items. TRY. lo_stmt = go_conn->create_statement( ). lo_rslt = lo_stmt->execute_query( 'SELECT [<поле>] FROM [dbo].[<таблица>] where <условия>' ). lo_rslt->SET_PARAM_STRUCT( lr_items ). WHILE lo_rslt->next( ) > 0. INSERT ls_items INTO ot_items. APPEND ls_items TO ot_items. ENDWHILE. CATCH cx_root INTO lo_ex. lv_message = lx_exc->get_text( ). ENDTRY. |
Можно также вызывать хранимые процедуры на SQL Server с параметрами:
1 2 3 |
GET REFERENCE OF iv_fstate INTO lr_fstate. " Параметр процедуры lo_stmt->set_param( lr_fstate ). lo_stmt->execute_procedure( proc_name = '<имя процедуры>'). |
На самом деле говорить про ноты и не писать при этом номера нот — не самый лучший способ описания проблем! Так как искать будут и могут найти неправильную ноту….Кстати, далеко не факт, что можно подключиться из любой Сап системы к МSSQL…для тех, кто на Винде или Линуксе х86-64 — без проблем ( 1774329 и 1644499 )…и не проблема подключиться к BW (512739).)……а вот остальные похоже обделены такой интеграционной возможностью , хотя может я плохо искал в июне этого года..
Спасибо за комментарий. На этом проекте я не выполнял базисные работы и поэтому не точно не знаю, какие ноты были установлены.