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
Можно ли запись в файл запустить в рамках транзакции? Если нет, есть ли какая-то альтернатива?