microsoft.ace.oledb.12.0 does not support the required transaction interface

Я хочу экспортировать данные из БД в подготовленный dbf-файл (с заголовками). Использую провайдер Microsoft.ACE.OLEDB.12.0. Если я запускаю запись в файл, не открывая транзакцию, данные записываются в файл без ошибок. Если в рамках транзакции, то получаю ошибку:

The requested operation could not be performed because OLE DB provider "MICROSOFT.ACE.OLEDB.12.0" for linked server "(null)" does not support the required transaction interface.

Упрощенная версия моего кода. Процедура записи в файл - testdbf:

Create procedure testdbf
AS
BEGIN
  Declare 
    @sql nvarchar(max),
    @FileDir varchar(100) = 'C:\Exch',
    @FileName varchar(100) = 'file.dbf'
  set @sql = 
    N'INSERT INTO OPENROWSET (''MICROSOFT.ACE.OLEDB.12.0'',''dBase 5.0;HDR=YES;IMEX=2;DATABASE=' 
    + @FileDir + N''',''SELECT * FROM '+ @FileName + N''')' + NCHAR(13) + NCHAR(10)
    + N'SELECT top 30 *' + NCHAR(13) + NCHAR(10)
    + N'FROM Mytable' + NCHAR(13) + NCHAR(10)
  exec dbo.sp_executesql @sql
END

Процедура, вызывающая testdbf, в транзакции:

Create procedure testdbf_app
AS 
BEGIN
    DECLARE
        @trancCount int = @@trancount,
        @ErrInfo maxtext = ''
    begin try
        if @trancCount = 0 begin transaction
        exec testdbf -- ошибка
        if @trancCount = 0 commit transaction
    end try
    begin catch 
        if @trancCount = 0 rollback transaction
        set @ErrInfo  = isnull(ERROR_MESSAGE(),'n/a') ;
        select @ErrInfo
    end catch
END

Можно ли запись в файл запустить в рамках транзакции? Если нет, есть ли какая-то альтернатива?


Ответы (0 шт):